{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 52,
   "id": "72a80657",
   "metadata": {},
   "outputs": [],
   "source": [
    "# 导入必要的库\n",
    "import torch\n",
    "import torch.nn as nn\n",
    "import torch.optim as optim\n",
    "import torchvision\n",
    "import torchvision.transforms as transforms\n",
    "from torch.utils.data import DataLoader\n",
    "import numpy as np\n",
    "import torch.nn.functional as F \n",
    "import random\n",
    "\n",
    "# 设置一个随机种子以实现可重现性\n",
    "# seed = 42\n",
    "# torch.manual_seed(seed)\n",
    "# np.random.seed(seed)\n",
    "# 设置随机种子,使训练结果可以复现\n",
    "# 在需要生成随机数据的实验中,每次实验都需要生成数据。设置随机种子是为了确保每次生成固定的随机数,这就使得每次实验结果显示一致了,有利于实验的比较和改进。使得每次运行该 .py 文件时生成的随机数相同。\n",
    "def same_seed(seed):\n",
    "    random.seed(seed) # 给random库设置随机种子\n",
    "    np.random.seed(seed) # 保证后续使用random函数时,产生固定的随机数\n",
    "    torch.manual_seed(seed) # 为CPU设置随机种子用于生成随机数,使得结果准确,方便下次复现,随机种子作用域是在设置时到下一次设置时\n",
    "    if torch.cuda.is_available():\n",
    "        torch.cuda.manual_seed(seed) # 为特定的GPU设备设置相同的随机种子\n",
    "        torch.cuda.manual_seed_all(seed) # 为所有可用的GPU设备设置相同的随机种子\n",
    "    torch.backends.cudnn.benchmark = False # 禁用自动优化,保证每次运行时使用相同算法\n",
    "    torch.backends.cudnn.deterministic = True # 固定网络结构,固定随机输入之后再固定网络结构,保证模型每次运行都能得到同样的结果,保证模型的可复现性\n",
    "# same_seed(39)\n",
    "\n",
    "# 定义要应用到数据的转换\n",
    "transform = transforms.Compose([\n",
    "    # transforms.RandomCrop(32, padding=4), #先四周填充0，在把图像随机裁剪成32*32\n",
    "    # transforms.RandomHorizontalFlip(), #图像一半的概率翻转，一半的概率不翻转\n",
    "    # transforms.RandomRotation((-45,45)), #随机旋转\n",
    "\n",
    "    transforms.ToTensor(),  # 将图像转换为张量\n",
    "    transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5))  # 对图像进行标准化\n",
    "])\n",
    "\n",
    "# 加载CIFAR-10数据集\n",
    "trainset = torchvision.datasets.CIFAR10(root='./data', train=True, download=True, transform=transform)  # 训练集\n",
    "testset = torchvision.datasets.CIFAR10(root='./data', train=False, download=True, transform=transform)  # 测试集\n",
    "\n",
    "# # 从训练集中随机采样10%的数据\n",
    "# sample_size = int(0.1 * len(trainset))\n",
    "# subset_indices = np.random.choice(len(trainset), sample_size, replace=False)\n",
    "# trainset = torch.utils.data.Subset(trainset, subset_indices)\n",
    "\n",
    "# 定义数据加载器\n",
    "batch_size = 64\n",
    "trainloader = DataLoader(trainset, batch_size=batch_size, shuffle=True)  # 训练数据加载器\n",
    "testloader = DataLoader(testset, batch_size=batch_size, shuffle=False)  # 测试数据加载器"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "a8d1642b",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": 46,
   "id": "52725bef",
   "metadata": {},
   "outputs": [],
   "source": [
    "# 判断是否有gpu\n",
    "device = \"cuda\" if torch.cuda.is_available() else \"cpu\""
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 47,
   "id": "1fc1f374",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<module 'torch.version' from 'c:\\\\Users\\\\xfwang\\\\anaconda3\\\\envs\\\\CX\\\\Lib\\\\site-packages\\\\torch\\\\version.py'>\n",
      "11.8\n",
      "90100\n",
      "True\n"
     ]
    }
   ],
   "source": [
    "import torch\n",
    "print(torch.version) #Pytorch版本\n",
    "print(torch.version.cuda) #CUDA版本\n",
    "print(torch.backends.cudnn.version()) #CUDNN版本\n",
    "print(torch.cuda.is_available())\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 61,
   "id": "22779316",
   "metadata": {},
   "outputs": [],
   "source": [
    "import torch.nn.functional as F\n",
    "class Net2(nn.Module):\n",
    "    def __init__(self):\n",
    "        super(Net2, self).__init__()\n",
    "        self.conv1 = nn.Conv2d(3, 6, 5)\n",
    "        self.pool = nn.MaxPool2d(2, 2)\n",
    "        self.conv2 = nn.Conv2d(6, 16, 5)\n",
    "        self.fc1 = nn.Linear(16 * 5 * 5, 120)\n",
    "        self.fc2 = nn.Linear(120, 84)\n",
    "        self.fc3 = nn.Linear(84, 10)\n",
    "\n",
    "    def forward(self, x):\n",
    "        x = self.pool(F.relu(self.conv1(x)))\n",
    "        x = self.pool(F.relu(self.conv2(x)))\n",
    "        x = x.view(-1, 16 * 5 * 5)\n",
    "        x = F.relu(self.fc1(x))\n",
    "        x = F.relu(self.fc2(x))\n",
    "        x = self.fc3(x)\n",
    "        return x\n",
    "net = Net2().to(device)\n",
    "\n",
    "# 定义损失函数和优化器\n",
    "criterion = nn.CrossEntropyLoss()  # 交叉熵损失\n",
    "optimizer = optim.SGD(net.parameters(), lr=0.001, momentum=0.9)  # 随机梯度下降优化器"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 55,
   "id": "b9108bd4",
   "metadata": {},
   "outputs": [],
   "source": [
    "class CIFAR10_CNN(nn.Module):\n",
    "    def __init__(self):\n",
    "        super(CIFAR10_CNN, self).__init__()\n",
    "        self.conv1 = nn.Sequential(\n",
    "            nn.Conv2d(3, 6,5),\n",
    "            nn.ReLU(),\n",
    "            nn.MaxPool2d(2, 2))\n",
    "        self.conv2 = nn.Sequential(\n",
    "            nn.Conv2d(6, 16, 5),\n",
    "            nn.ReLU(),\n",
    "            nn.MaxPool2d(2, 2),\n",
    "        )\n",
    "        self.fc = nn.Sequential(\n",
    "            nn.Flatten(),\n",
    "            nn.Linear(16 * 5 * 5, 120),\n",
    "            nn.ReLU(),\n",
    "            nn.Linear(120, 84),\n",
    "            nn.ReLU(),\n",
    "            nn.Linear(84, 10),\n",
    "        )\n",
    "\n",
    "    def forward(self, x):\n",
    "        x = self.conv1(x)\n",
    "        x = self.conv2(x)\n",
    "        x = self.fc(x)\n",
    "        return x\n",
    "net = CIFAR10_CNN().to(device)\n",
    "\n",
    "# 定义损失函数和优化器\n",
    "criterion = nn.CrossEntropyLoss()  # 交叉熵损失\n",
    "optimizer = optim.SGD(net.parameters(), lr=0.001,momentum=0.9)  # 随机梯度下降优化器"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 53,
   "id": "55efde26",
   "metadata": {},
   "outputs": [],
   "source": [
    "# 定义卷积神经网络模型\n",
    "class Net(nn.Module):\n",
    "    def __init__(self):\n",
    "        super(Net, self).__init__()\n",
    "        self.conv1 = nn.Conv2d(3, 64, 3)  # 第一个卷积层\n",
    "        self.pool = nn.MaxPool2d(2, 2)  # 最大池化层\n",
    "        self.conv2 = nn.Conv2d(64, 128, 3)  # 第二个卷积层\n",
    "        self.conv3 = nn.Conv2d(128, 256, 3)  # 第二个卷积层\n",
    "        self.fc1 = nn.Linear(256 * 2 * 2, 1024)  # 第一个全连接层\n",
    "        self.fc2 = nn.Linear(1024, 84)  # 第二个全连接层\n",
    "        self.fc3 = nn.Linear(1024, 10)  # 输出层\n",
    "\n",
    "    def forward(self, x):\n",
    "        # print(x.shape)\n",
    "        \n",
    "        x = self.pool(F.relu(self.conv1(x)))  # 第一个卷积层后面跟着ReLU激活函数和池化层\n",
    "        # print(x.shape)\n",
    "\n",
    "        x = self.pool(F.relu(self.conv2(x)))  # 第二个卷积层后面跟着ReLU激活函数和池化层\n",
    "        # print(x.shape)\n",
    "        x = self.pool(F.relu(self.conv3(x)))  # 第二个卷积层后面跟着ReLU激活函数和池化层\n",
    "        # print(x.shape)\n",
    "        x = x.view(-1, 256 * 2 * 2)  # 将张量展平\n",
    "        x = F.relu(self.fc1(x))  # 第一个全连接层后面跟着ReLU激活函数\n",
    "        x = F.softmax(self.fc3(x))  # 输出层\n",
    "        return x\n",
    "\n",
    "net = Net().to(device)\n",
    "\n",
    "# 定义损失函数和优化器\n",
    "criterion = nn.CrossEntropyLoss()  # 交叉熵损失\n",
    "optimizer = optim.SGD(net.parameters(), lr=0.001,momentum=0.9)  # 随机梯度下降优化器\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 72,
   "id": "25e3cfdb",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "==========================================================================================\n",
       "Layer (type:depth-idx)                   Output Shape              Param #\n",
       "==========================================================================================\n",
       "Net2                                     [64, 10]                  --\n",
       "├─Conv2d: 1-1                            [64, 6, 28, 28]           456\n",
       "├─MaxPool2d: 1-2                         [64, 6, 14, 14]           --\n",
       "├─Conv2d: 1-3                            [64, 16, 10, 10]          2,416\n",
       "├─MaxPool2d: 1-4                         [64, 16, 5, 5]            --\n",
       "├─Linear: 1-5                            [64, 120]                 48,120\n",
       "├─Linear: 1-6                            [64, 84]                  10,164\n",
       "├─Linear: 1-7                            [64, 10]                  850\n",
       "==========================================================================================\n",
       "Total params: 62,006\n",
       "Trainable params: 62,006\n",
       "Non-trainable params: 0\n",
       "Total mult-adds (Units.MEGABYTES): 42.13\n",
       "==========================================================================================\n",
       "Input size (MB): 0.79\n",
       "Forward/backward pass size (MB): 3.34\n",
       "Params size (MB): 0.25\n",
       "Estimated Total Size (MB): 4.37\n",
       "=========================================================================================="
      ]
     },
     "execution_count": 72,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 使用 torchinfo 输出模型摘要\n",
    "from torchinfo import summary\n",
    "summary(net, (64, 3, 32, 32))  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 65,
   "id": "3ccadae8",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Train Epoch: 0 [0/50000 (0%)]\tLoss: 0.003554\n",
      "Train Epoch: 0 [6400/50000 (13%)]\tLoss: 0.219991\n",
      "Train Epoch: 0 [12800/50000 (26%)]\tLoss: 0.206175\n",
      "Train Epoch: 0 [19200/50000 (38%)]\tLoss: 0.218316\n",
      "Train Epoch: 0 [25600/50000 (51%)]\tLoss: 0.240986\n",
      "Train Epoch: 0 [32000/50000 (64%)]\tLoss: 0.264205\n",
      "Train Epoch: 0 [38400/50000 (77%)]\tLoss: 0.254112\n",
      "Train Epoch: 0 [44800/50000 (90%)]\tLoss: 0.277439\n",
      "Model saved as model_0.pth\n",
      "Train Epoch: 1 [0/50000 (0%)]\tLoss: 0.001076\n",
      "Train Epoch: 1 [6400/50000 (13%)]\tLoss: 0.211131\n",
      "Train Epoch: 1 [12800/50000 (26%)]\tLoss: 0.220615\n",
      "Train Epoch: 1 [19200/50000 (38%)]\tLoss: 0.196502\n",
      "Train Epoch: 1 [25600/50000 (51%)]\tLoss: 0.225619\n",
      "Train Epoch: 1 [32000/50000 (64%)]\tLoss: 0.223657\n",
      "Train Epoch: 1 [38400/50000 (77%)]\tLoss: 0.244398\n",
      "Train Epoch: 1 [44800/50000 (90%)]\tLoss: 0.266983\n",
      "Train Epoch: 2 [0/50000 (0%)]\tLoss: 0.001096\n",
      "Train Epoch: 2 [6400/50000 (13%)]\tLoss: 0.197834\n",
      "Train Epoch: 2 [12800/50000 (26%)]\tLoss: 0.211347\n",
      "Train Epoch: 2 [19200/50000 (38%)]\tLoss: 0.212239\n",
      "Train Epoch: 2 [25600/50000 (51%)]\tLoss: 0.222503\n",
      "Train Epoch: 2 [32000/50000 (64%)]\tLoss: 0.235731\n",
      "Train Epoch: 2 [38400/50000 (77%)]\tLoss: 0.231895\n",
      "Train Epoch: 2 [44800/50000 (90%)]\tLoss: 0.252117\n",
      "Train Epoch: 3 [0/50000 (0%)]\tLoss: 0.001600\n",
      "Train Epoch: 3 [6400/50000 (13%)]\tLoss: 0.186761\n",
      "Train Epoch: 3 [12800/50000 (26%)]\tLoss: 0.204435\n",
      "Train Epoch: 3 [19200/50000 (38%)]\tLoss: 0.210352\n",
      "Train Epoch: 3 [25600/50000 (51%)]\tLoss: 0.251588\n",
      "Train Epoch: 3 [32000/50000 (64%)]\tLoss: 0.218997\n",
      "Train Epoch: 3 [38400/50000 (77%)]\tLoss: 0.224988\n",
      "Train Epoch: 3 [44800/50000 (90%)]\tLoss: 0.247281\n",
      "Train Epoch: 4 [0/50000 (0%)]\tLoss: 0.001556\n",
      "Train Epoch: 4 [6400/50000 (13%)]\tLoss: 0.195089\n",
      "Train Epoch: 4 [12800/50000 (26%)]\tLoss: 0.180459\n",
      "Train Epoch: 4 [19200/50000 (38%)]\tLoss: 0.212163\n",
      "Train Epoch: 4 [25600/50000 (51%)]\tLoss: 0.222399\n",
      "Train Epoch: 4 [32000/50000 (64%)]\tLoss: 0.221492\n",
      "Train Epoch: 4 [38400/50000 (77%)]\tLoss: 0.204668\n",
      "Train Epoch: 4 [44800/50000 (90%)]\tLoss: 0.237597\n",
      "Train Epoch: 5 [0/50000 (0%)]\tLoss: 0.001611\n",
      "Train Epoch: 5 [6400/50000 (13%)]\tLoss: 0.200813\n",
      "Train Epoch: 5 [12800/50000 (26%)]\tLoss: 0.223396\n",
      "Train Epoch: 5 [19200/50000 (38%)]\tLoss: 0.216474\n",
      "Train Epoch: 5 [25600/50000 (51%)]\tLoss: 0.212682\n",
      "Train Epoch: 5 [32000/50000 (64%)]\tLoss: 0.218124\n",
      "Train Epoch: 5 [38400/50000 (77%)]\tLoss: 0.228646\n",
      "Train Epoch: 5 [44800/50000 (90%)]\tLoss: 0.226862\n",
      "Train Epoch: 6 [0/50000 (0%)]\tLoss: 0.002404\n",
      "Train Epoch: 6 [6400/50000 (13%)]\tLoss: 0.185848\n",
      "Train Epoch: 6 [12800/50000 (26%)]\tLoss: 0.180040\n",
      "Train Epoch: 6 [19200/50000 (38%)]\tLoss: 0.207256\n",
      "Train Epoch: 6 [25600/50000 (51%)]\tLoss: 0.218931\n",
      "Train Epoch: 6 [32000/50000 (64%)]\tLoss: 0.213050\n",
      "Train Epoch: 6 [38400/50000 (77%)]\tLoss: 0.250028\n",
      "Train Epoch: 6 [44800/50000 (90%)]\tLoss: 0.244401\n",
      "Train Epoch: 7 [0/50000 (0%)]\tLoss: 0.001283\n",
      "Train Epoch: 7 [6400/50000 (13%)]\tLoss: 0.173159\n",
      "Train Epoch: 7 [12800/50000 (26%)]\tLoss: 0.175973\n",
      "Train Epoch: 7 [19200/50000 (38%)]\tLoss: 0.203518\n",
      "Train Epoch: 7 [25600/50000 (51%)]\tLoss: 0.219885\n",
      "Train Epoch: 7 [32000/50000 (64%)]\tLoss: 0.218347\n",
      "Train Epoch: 7 [38400/50000 (77%)]\tLoss: 0.245918\n",
      "Train Epoch: 7 [44800/50000 (90%)]\tLoss: 0.271298\n",
      "Train Epoch: 8 [0/50000 (0%)]\tLoss: 0.000602\n",
      "Train Epoch: 8 [6400/50000 (13%)]\tLoss: 0.182384\n",
      "Train Epoch: 8 [12800/50000 (26%)]\tLoss: 0.156403\n",
      "Train Epoch: 8 [19200/50000 (38%)]\tLoss: 0.172411\n",
      "Train Epoch: 8 [25600/50000 (51%)]\tLoss: 0.180506\n",
      "Train Epoch: 8 [32000/50000 (64%)]\tLoss: 0.225492\n",
      "Train Epoch: 8 [38400/50000 (77%)]\tLoss: 0.203525\n",
      "Train Epoch: 8 [44800/50000 (90%)]\tLoss: 0.226986\n",
      "Train Epoch: 9 [0/50000 (0%)]\tLoss: 0.002056\n",
      "Train Epoch: 9 [6400/50000 (13%)]\tLoss: 0.175547\n",
      "Train Epoch: 9 [12800/50000 (26%)]\tLoss: 0.179547\n",
      "Train Epoch: 9 [19200/50000 (38%)]\tLoss: 0.188032\n",
      "Train Epoch: 9 [25600/50000 (51%)]\tLoss: 0.210936\n",
      "Train Epoch: 9 [32000/50000 (64%)]\tLoss: 0.195645\n",
      "Train Epoch: 9 [38400/50000 (77%)]\tLoss: 0.212791\n",
      "Train Epoch: 9 [44800/50000 (90%)]\tLoss: 0.220352\n",
      "Train Epoch: 10 [0/50000 (0%)]\tLoss: 0.001757\n",
      "Train Epoch: 10 [6400/50000 (13%)]\tLoss: 0.170117\n",
      "Train Epoch: 10 [12800/50000 (26%)]\tLoss: 0.167008\n",
      "Train Epoch: 10 [19200/50000 (38%)]\tLoss: 0.181006\n",
      "Train Epoch: 10 [25600/50000 (51%)]\tLoss: 0.185499\n",
      "Train Epoch: 10 [32000/50000 (64%)]\tLoss: 0.180460\n",
      "Train Epoch: 10 [38400/50000 (77%)]\tLoss: 0.238301\n",
      "Train Epoch: 10 [44800/50000 (90%)]\tLoss: 0.235644\n",
      "Model saved as model_10.pth\n",
      "Train Epoch: 11 [0/50000 (0%)]\tLoss: 0.000716\n",
      "Train Epoch: 11 [6400/50000 (13%)]\tLoss: 0.180974\n",
      "Train Epoch: 11 [12800/50000 (26%)]\tLoss: 0.171473\n",
      "Train Epoch: 11 [19200/50000 (38%)]\tLoss: 0.185283\n",
      "Train Epoch: 11 [25600/50000 (51%)]\tLoss: 0.194421\n",
      "Train Epoch: 11 [32000/50000 (64%)]\tLoss: 0.219081\n",
      "Train Epoch: 11 [38400/50000 (77%)]\tLoss: 0.220831\n",
      "Train Epoch: 11 [44800/50000 (90%)]\tLoss: 0.211866\n",
      "Train Epoch: 12 [0/50000 (0%)]\tLoss: 0.002149\n",
      "Train Epoch: 12 [6400/50000 (13%)]\tLoss: 0.154109\n",
      "Train Epoch: 12 [12800/50000 (26%)]\tLoss: 0.161801\n",
      "Train Epoch: 12 [19200/50000 (38%)]\tLoss: 0.161623\n",
      "Train Epoch: 12 [25600/50000 (51%)]\tLoss: 0.188242\n",
      "Train Epoch: 12 [32000/50000 (64%)]\tLoss: 0.177465\n",
      "Train Epoch: 12 [38400/50000 (77%)]\tLoss: 0.193446\n",
      "Train Epoch: 12 [44800/50000 (90%)]\tLoss: 0.211392\n",
      "Train Epoch: 13 [0/50000 (0%)]\tLoss: 0.002081\n",
      "Train Epoch: 13 [6400/50000 (13%)]\tLoss: 0.184043\n",
      "Train Epoch: 13 [12800/50000 (26%)]\tLoss: 0.184001\n",
      "Train Epoch: 13 [19200/50000 (38%)]\tLoss: 0.166370\n",
      "Train Epoch: 13 [25600/50000 (51%)]\tLoss: 0.178925\n",
      "Train Epoch: 13 [32000/50000 (64%)]\tLoss: 0.189999\n",
      "Train Epoch: 13 [38400/50000 (77%)]\tLoss: 0.210641\n",
      "Train Epoch: 13 [44800/50000 (90%)]\tLoss: 0.244505\n",
      "Train Epoch: 14 [0/50000 (0%)]\tLoss: 0.001317\n",
      "Train Epoch: 14 [6400/50000 (13%)]\tLoss: 0.161182\n",
      "Train Epoch: 14 [12800/50000 (26%)]\tLoss: 0.150649\n",
      "Train Epoch: 14 [19200/50000 (38%)]\tLoss: 0.179271\n",
      "Train Epoch: 14 [25600/50000 (51%)]\tLoss: 0.188684\n",
      "Train Epoch: 14 [32000/50000 (64%)]\tLoss: 0.200467\n",
      "Train Epoch: 14 [38400/50000 (77%)]\tLoss: 0.209354\n",
      "Train Epoch: 14 [44800/50000 (90%)]\tLoss: 0.220370\n",
      "Train Epoch: 15 [0/50000 (0%)]\tLoss: 0.002061\n",
      "Train Epoch: 15 [6400/50000 (13%)]\tLoss: 0.172052\n",
      "Train Epoch: 15 [12800/50000 (26%)]\tLoss: 0.156592\n",
      "Train Epoch: 15 [19200/50000 (38%)]\tLoss: 0.154708\n",
      "Train Epoch: 15 [25600/50000 (51%)]\tLoss: 0.173159\n",
      "Train Epoch: 15 [32000/50000 (64%)]\tLoss: 0.185281\n",
      "Train Epoch: 15 [38400/50000 (77%)]\tLoss: 0.176677\n",
      "Train Epoch: 15 [44800/50000 (90%)]\tLoss: 0.202661\n",
      "Train Epoch: 16 [0/50000 (0%)]\tLoss: 0.001502\n",
      "Train Epoch: 16 [6400/50000 (13%)]\tLoss: 0.133381\n",
      "Train Epoch: 16 [12800/50000 (26%)]\tLoss: 0.151032\n",
      "Train Epoch: 16 [19200/50000 (38%)]\tLoss: 0.150622\n",
      "Train Epoch: 16 [25600/50000 (51%)]\tLoss: 0.148451\n",
      "Train Epoch: 16 [32000/50000 (64%)]\tLoss: 0.173902\n",
      "Train Epoch: 16 [38400/50000 (77%)]\tLoss: 0.176196\n",
      "Train Epoch: 16 [44800/50000 (90%)]\tLoss: 0.203530\n",
      "Train Epoch: 17 [0/50000 (0%)]\tLoss: 0.001334\n",
      "Train Epoch: 17 [6400/50000 (13%)]\tLoss: 0.143099\n",
      "Train Epoch: 17 [12800/50000 (26%)]\tLoss: 0.130687\n",
      "Train Epoch: 17 [19200/50000 (38%)]\tLoss: 0.157516\n",
      "Train Epoch: 17 [25600/50000 (51%)]\tLoss: 0.176435\n",
      "Train Epoch: 17 [32000/50000 (64%)]\tLoss: 0.178758\n",
      "Train Epoch: 17 [38400/50000 (77%)]\tLoss: 0.224232\n",
      "Train Epoch: 17 [44800/50000 (90%)]\tLoss: 0.214292\n",
      "Train Epoch: 18 [0/50000 (0%)]\tLoss: 0.000748\n",
      "Train Epoch: 18 [6400/50000 (13%)]\tLoss: 0.145311\n",
      "Train Epoch: 18 [12800/50000 (26%)]\tLoss: 0.145367\n",
      "Train Epoch: 18 [19200/50000 (38%)]\tLoss: 0.151801\n",
      "Train Epoch: 18 [25600/50000 (51%)]\tLoss: 0.180466\n",
      "Train Epoch: 18 [32000/50000 (64%)]\tLoss: 0.187967\n",
      "Train Epoch: 18 [38400/50000 (77%)]\tLoss: 0.191560\n",
      "Train Epoch: 18 [44800/50000 (90%)]\tLoss: 0.213061\n",
      "Train Epoch: 19 [0/50000 (0%)]\tLoss: 0.001630\n",
      "Train Epoch: 19 [6400/50000 (13%)]\tLoss: 0.157534\n",
      "Train Epoch: 19 [12800/50000 (26%)]\tLoss: 0.165689\n",
      "Train Epoch: 19 [19200/50000 (38%)]\tLoss: 0.147700\n",
      "Train Epoch: 19 [25600/50000 (51%)]\tLoss: 0.147784\n",
      "Train Epoch: 19 [32000/50000 (64%)]\tLoss: 0.179005\n",
      "Train Epoch: 19 [38400/50000 (77%)]\tLoss: 0.180226\n",
      "Train Epoch: 19 [44800/50000 (90%)]\tLoss: 0.228079\n",
      "Train Epoch: 20 [0/50000 (0%)]\tLoss: 0.002191\n",
      "Train Epoch: 20 [6400/50000 (13%)]\tLoss: 0.133067\n",
      "Train Epoch: 20 [12800/50000 (26%)]\tLoss: 0.136847\n",
      "Train Epoch: 20 [19200/50000 (38%)]\tLoss: 0.139332\n",
      "Train Epoch: 20 [25600/50000 (51%)]\tLoss: 0.140798\n",
      "Train Epoch: 20 [32000/50000 (64%)]\tLoss: 0.154934\n",
      "Train Epoch: 20 [38400/50000 (77%)]\tLoss: 0.195551\n",
      "Train Epoch: 20 [44800/50000 (90%)]\tLoss: 0.194975\n",
      "Model saved as model_20.pth\n",
      "Train Epoch: 21 [0/50000 (0%)]\tLoss: 0.001433\n",
      "Train Epoch: 21 [6400/50000 (13%)]\tLoss: 0.154313\n",
      "Train Epoch: 21 [12800/50000 (26%)]\tLoss: 0.141905\n",
      "Train Epoch: 21 [19200/50000 (38%)]\tLoss: 0.157017\n",
      "Train Epoch: 21 [25600/50000 (51%)]\tLoss: 0.140187\n",
      "Train Epoch: 21 [32000/50000 (64%)]\tLoss: 0.179502\n",
      "Train Epoch: 21 [38400/50000 (77%)]\tLoss: 0.185865\n",
      "Train Epoch: 21 [44800/50000 (90%)]\tLoss: 0.201230\n",
      "Train Epoch: 22 [0/50000 (0%)]\tLoss: 0.001274\n",
      "Train Epoch: 22 [6400/50000 (13%)]\tLoss: 0.136786\n",
      "Train Epoch: 22 [12800/50000 (26%)]\tLoss: 0.137391\n",
      "Train Epoch: 22 [19200/50000 (38%)]\tLoss: 0.156955\n",
      "Train Epoch: 22 [25600/50000 (51%)]\tLoss: 0.164380\n",
      "Train Epoch: 22 [32000/50000 (64%)]\tLoss: 0.170342\n",
      "Train Epoch: 22 [38400/50000 (77%)]\tLoss: 0.148104\n",
      "Train Epoch: 22 [44800/50000 (90%)]\tLoss: 0.194050\n",
      "Train Epoch: 23 [0/50000 (0%)]\tLoss: 0.001667\n",
      "Train Epoch: 23 [6400/50000 (13%)]\tLoss: 0.163939\n",
      "Train Epoch: 23 [12800/50000 (26%)]\tLoss: 0.149740\n",
      "Train Epoch: 23 [19200/50000 (38%)]\tLoss: 0.126005\n",
      "Train Epoch: 23 [25600/50000 (51%)]\tLoss: 0.153219\n",
      "Train Epoch: 23 [32000/50000 (64%)]\tLoss: 0.150182\n",
      "Train Epoch: 23 [38400/50000 (77%)]\tLoss: 0.157061\n",
      "Train Epoch: 23 [44800/50000 (90%)]\tLoss: 0.175758\n",
      "Train Epoch: 24 [0/50000 (0%)]\tLoss: 0.000881\n",
      "Train Epoch: 24 [6400/50000 (13%)]\tLoss: 0.127973\n",
      "Train Epoch: 24 [12800/50000 (26%)]\tLoss: 0.137708\n",
      "Train Epoch: 24 [19200/50000 (38%)]\tLoss: 0.127821\n",
      "Train Epoch: 24 [25600/50000 (51%)]\tLoss: 0.120716\n",
      "Train Epoch: 24 [32000/50000 (64%)]\tLoss: 0.153505\n",
      "Train Epoch: 24 [38400/50000 (77%)]\tLoss: 0.177442\n",
      "Train Epoch: 24 [44800/50000 (90%)]\tLoss: 0.200669\n",
      "Train Epoch: 25 [0/50000 (0%)]\tLoss: 0.001111\n",
      "Train Epoch: 25 [6400/50000 (13%)]\tLoss: 0.134878\n",
      "Train Epoch: 25 [12800/50000 (26%)]\tLoss: 0.129659\n",
      "Train Epoch: 25 [19200/50000 (38%)]\tLoss: 0.141613\n",
      "Train Epoch: 25 [25600/50000 (51%)]\tLoss: 0.132126\n",
      "Train Epoch: 25 [32000/50000 (64%)]\tLoss: 0.143147\n",
      "Train Epoch: 25 [38400/50000 (77%)]\tLoss: 0.155241\n",
      "Train Epoch: 25 [44800/50000 (90%)]\tLoss: 0.163607\n",
      "Train Epoch: 26 [0/50000 (0%)]\tLoss: 0.000846\n",
      "Train Epoch: 26 [6400/50000 (13%)]\tLoss: 0.148511\n",
      "Train Epoch: 26 [12800/50000 (26%)]\tLoss: 0.146752\n",
      "Train Epoch: 26 [19200/50000 (38%)]\tLoss: 0.147158\n",
      "Train Epoch: 26 [25600/50000 (51%)]\tLoss: 0.158612\n",
      "Train Epoch: 26 [32000/50000 (64%)]\tLoss: 0.137840\n",
      "Train Epoch: 26 [38400/50000 (77%)]\tLoss: 0.142892\n",
      "Train Epoch: 26 [44800/50000 (90%)]\tLoss: 0.155835\n",
      "Train Epoch: 27 [0/50000 (0%)]\tLoss: 0.001991\n",
      "Train Epoch: 27 [6400/50000 (13%)]\tLoss: 0.130107\n",
      "Train Epoch: 27 [12800/50000 (26%)]\tLoss: 0.109022\n",
      "Train Epoch: 27 [19200/50000 (38%)]\tLoss: 0.141561\n",
      "Train Epoch: 27 [25600/50000 (51%)]\tLoss: 0.133320\n",
      "Train Epoch: 27 [32000/50000 (64%)]\tLoss: 0.145561\n",
      "Train Epoch: 27 [38400/50000 (77%)]\tLoss: 0.158525\n",
      "Train Epoch: 27 [44800/50000 (90%)]\tLoss: 0.158773\n",
      "Train Epoch: 28 [0/50000 (0%)]\tLoss: 0.000825\n",
      "Train Epoch: 28 [6400/50000 (13%)]\tLoss: 0.112650\n",
      "Train Epoch: 28 [12800/50000 (26%)]\tLoss: 0.102683\n",
      "Train Epoch: 28 [19200/50000 (38%)]\tLoss: 0.108386\n",
      "Train Epoch: 28 [25600/50000 (51%)]\tLoss: 0.113181\n",
      "Train Epoch: 28 [32000/50000 (64%)]\tLoss: 0.140589\n",
      "Train Epoch: 28 [38400/50000 (77%)]\tLoss: 0.166521\n",
      "Train Epoch: 28 [44800/50000 (90%)]\tLoss: 0.149232\n",
      "Train Epoch: 29 [0/50000 (0%)]\tLoss: 0.001295\n",
      "Train Epoch: 29 [6400/50000 (13%)]\tLoss: 0.113755\n",
      "Train Epoch: 29 [12800/50000 (26%)]\tLoss: 0.108980\n",
      "Train Epoch: 29 [19200/50000 (38%)]\tLoss: 0.131999\n",
      "Train Epoch: 29 [25600/50000 (51%)]\tLoss: 0.159397\n",
      "Train Epoch: 29 [32000/50000 (64%)]\tLoss: 0.174975\n",
      "Train Epoch: 29 [38400/50000 (77%)]\tLoss: 0.157039\n",
      "Train Epoch: 29 [44800/50000 (90%)]\tLoss: 0.152606\n",
      "Train Epoch: 30 [0/50000 (0%)]\tLoss: 0.000839\n",
      "Train Epoch: 30 [6400/50000 (13%)]\tLoss: 0.130919\n",
      "Train Epoch: 30 [12800/50000 (26%)]\tLoss: 0.145023\n",
      "Train Epoch: 30 [19200/50000 (38%)]\tLoss: 0.152727\n",
      "Train Epoch: 30 [25600/50000 (51%)]\tLoss: 0.152710\n",
      "Train Epoch: 30 [32000/50000 (64%)]\tLoss: 0.147120\n",
      "Train Epoch: 30 [38400/50000 (77%)]\tLoss: 0.172516\n",
      "Train Epoch: 30 [44800/50000 (90%)]\tLoss: 0.157842\n",
      "Model saved as model_30.pth\n",
      "Train Epoch: 31 [0/50000 (0%)]\tLoss: 0.001102\n",
      "Train Epoch: 31 [6400/50000 (13%)]\tLoss: 0.142574\n",
      "Train Epoch: 31 [12800/50000 (26%)]\tLoss: 0.136772\n",
      "Train Epoch: 31 [19200/50000 (38%)]\tLoss: 0.134811\n",
      "Train Epoch: 31 [25600/50000 (51%)]\tLoss: 0.136318\n",
      "Train Epoch: 31 [32000/50000 (64%)]\tLoss: 0.137259\n",
      "Train Epoch: 31 [38400/50000 (77%)]\tLoss: 0.145170\n",
      "Train Epoch: 31 [44800/50000 (90%)]\tLoss: 0.177313\n",
      "Train Epoch: 32 [0/50000 (0%)]\tLoss: 0.000471\n",
      "Train Epoch: 32 [6400/50000 (13%)]\tLoss: 0.117995\n",
      "Train Epoch: 32 [12800/50000 (26%)]\tLoss: 0.137915\n",
      "Train Epoch: 32 [19200/50000 (38%)]\tLoss: 0.137343\n",
      "Train Epoch: 32 [25600/50000 (51%)]\tLoss: 0.141761\n",
      "Train Epoch: 32 [32000/50000 (64%)]\tLoss: 0.165436\n",
      "Train Epoch: 32 [38400/50000 (77%)]\tLoss: 0.156591\n",
      "Train Epoch: 32 [44800/50000 (90%)]\tLoss: 0.212814\n",
      "Train Epoch: 33 [0/50000 (0%)]\tLoss: 0.001313\n",
      "Train Epoch: 33 [6400/50000 (13%)]\tLoss: 0.179546\n",
      "Train Epoch: 33 [12800/50000 (26%)]\tLoss: 0.144065\n",
      "Train Epoch: 33 [19200/50000 (38%)]\tLoss: 0.159225\n",
      "Train Epoch: 33 [25600/50000 (51%)]\tLoss: 0.181326\n",
      "Train Epoch: 33 [32000/50000 (64%)]\tLoss: 0.157805\n",
      "Train Epoch: 33 [38400/50000 (77%)]\tLoss: 0.154906\n",
      "Train Epoch: 33 [44800/50000 (90%)]\tLoss: 0.157780\n",
      "Train Epoch: 34 [0/50000 (0%)]\tLoss: 0.001438\n",
      "Train Epoch: 34 [6400/50000 (13%)]\tLoss: 0.105840\n",
      "Train Epoch: 34 [12800/50000 (26%)]\tLoss: 0.105714\n",
      "Train Epoch: 34 [19200/50000 (38%)]\tLoss: 0.094439\n",
      "Train Epoch: 34 [25600/50000 (51%)]\tLoss: 0.115260\n",
      "Train Epoch: 34 [32000/50000 (64%)]\tLoss: 0.124975\n",
      "Train Epoch: 34 [38400/50000 (77%)]\tLoss: 0.146396\n",
      "Train Epoch: 34 [44800/50000 (90%)]\tLoss: 0.147520\n",
      "Train Epoch: 35 [0/50000 (0%)]\tLoss: 0.002122\n",
      "Train Epoch: 35 [6400/50000 (13%)]\tLoss: 0.100536\n",
      "Train Epoch: 35 [12800/50000 (26%)]\tLoss: 0.102875\n",
      "Train Epoch: 35 [19200/50000 (38%)]\tLoss: 0.117248\n",
      "Train Epoch: 35 [25600/50000 (51%)]\tLoss: 0.115208\n",
      "Train Epoch: 35 [32000/50000 (64%)]\tLoss: 0.111303\n",
      "Train Epoch: 35 [38400/50000 (77%)]\tLoss: 0.146988\n",
      "Train Epoch: 35 [44800/50000 (90%)]\tLoss: 0.171778\n",
      "Train Epoch: 36 [0/50000 (0%)]\tLoss: 0.001002\n",
      "Train Epoch: 36 [6400/50000 (13%)]\tLoss: 0.137877\n",
      "Train Epoch: 36 [12800/50000 (26%)]\tLoss: 0.113487\n",
      "Train Epoch: 36 [19200/50000 (38%)]\tLoss: 0.118807\n",
      "Train Epoch: 36 [25600/50000 (51%)]\tLoss: 0.129209\n",
      "Train Epoch: 36 [32000/50000 (64%)]\tLoss: 0.129339\n",
      "Train Epoch: 36 [38400/50000 (77%)]\tLoss: 0.149993\n",
      "Train Epoch: 36 [44800/50000 (90%)]\tLoss: 0.178629\n",
      "Train Epoch: 37 [0/50000 (0%)]\tLoss: 0.001808\n",
      "Train Epoch: 37 [6400/50000 (13%)]\tLoss: 0.141382\n",
      "Train Epoch: 37 [12800/50000 (26%)]\tLoss: 0.143392\n",
      "Train Epoch: 37 [19200/50000 (38%)]\tLoss: 0.153964\n",
      "Train Epoch: 37 [25600/50000 (51%)]\tLoss: 0.137189\n",
      "Train Epoch: 37 [32000/50000 (64%)]\tLoss: 0.146308\n",
      "Train Epoch: 37 [38400/50000 (77%)]\tLoss: 0.158592\n",
      "Train Epoch: 37 [44800/50000 (90%)]\tLoss: 0.165737\n",
      "Train Epoch: 38 [0/50000 (0%)]\tLoss: 0.001083\n",
      "Train Epoch: 38 [6400/50000 (13%)]\tLoss: 0.123397\n",
      "Train Epoch: 38 [12800/50000 (26%)]\tLoss: 0.130787\n",
      "Train Epoch: 38 [19200/50000 (38%)]\tLoss: 0.110593\n",
      "Train Epoch: 38 [25600/50000 (51%)]\tLoss: 0.137271\n",
      "Train Epoch: 38 [32000/50000 (64%)]\tLoss: 0.153364\n",
      "Train Epoch: 38 [38400/50000 (77%)]\tLoss: 0.164984\n",
      "Train Epoch: 38 [44800/50000 (90%)]\tLoss: 0.159463\n",
      "Train Epoch: 39 [0/50000 (0%)]\tLoss: 0.001046\n",
      "Train Epoch: 39 [6400/50000 (13%)]\tLoss: 0.125817\n",
      "Train Epoch: 39 [12800/50000 (26%)]\tLoss: 0.093979\n",
      "Train Epoch: 39 [19200/50000 (38%)]\tLoss: 0.121091\n",
      "Train Epoch: 39 [25600/50000 (51%)]\tLoss: 0.132230\n",
      "Train Epoch: 39 [32000/50000 (64%)]\tLoss: 0.127327\n",
      "Train Epoch: 39 [38400/50000 (77%)]\tLoss: 0.133474\n",
      "Train Epoch: 39 [44800/50000 (90%)]\tLoss: 0.161753\n",
      "Train Epoch: 40 [0/50000 (0%)]\tLoss: 0.000808\n",
      "Train Epoch: 40 [6400/50000 (13%)]\tLoss: 0.105652\n",
      "Train Epoch: 40 [12800/50000 (26%)]\tLoss: 0.110585\n",
      "Train Epoch: 40 [19200/50000 (38%)]\tLoss: 0.101143\n",
      "Train Epoch: 40 [25600/50000 (51%)]\tLoss: 0.095851\n",
      "Train Epoch: 40 [32000/50000 (64%)]\tLoss: 0.104469\n",
      "Train Epoch: 40 [38400/50000 (77%)]\tLoss: 0.116365\n",
      "Train Epoch: 40 [44800/50000 (90%)]\tLoss: 0.137422\n",
      "Model saved as model_40.pth\n",
      "Train Epoch: 41 [0/50000 (0%)]\tLoss: 0.000677\n",
      "Train Epoch: 41 [6400/50000 (13%)]\tLoss: 0.140945\n",
      "Train Epoch: 41 [12800/50000 (26%)]\tLoss: 0.108297\n",
      "Train Epoch: 41 [19200/50000 (38%)]\tLoss: 0.112032\n",
      "Train Epoch: 41 [25600/50000 (51%)]\tLoss: 0.120434\n",
      "Train Epoch: 41 [32000/50000 (64%)]\tLoss: 0.112484\n",
      "Train Epoch: 41 [38400/50000 (77%)]\tLoss: 0.130098\n",
      "Train Epoch: 41 [44800/50000 (90%)]\tLoss: 0.136504\n",
      "Train Epoch: 42 [0/50000 (0%)]\tLoss: 0.000874\n",
      "Train Epoch: 42 [6400/50000 (13%)]\tLoss: 0.128419\n",
      "Train Epoch: 42 [12800/50000 (26%)]\tLoss: 0.110076\n",
      "Train Epoch: 42 [19200/50000 (38%)]\tLoss: 0.112801\n",
      "Train Epoch: 42 [25600/50000 (51%)]\tLoss: 0.123607\n",
      "Train Epoch: 42 [32000/50000 (64%)]\tLoss: 0.117941\n",
      "Train Epoch: 42 [38400/50000 (77%)]\tLoss: 0.127550\n",
      "Train Epoch: 42 [44800/50000 (90%)]\tLoss: 0.158606\n",
      "Train Epoch: 43 [0/50000 (0%)]\tLoss: 0.000358\n",
      "Train Epoch: 43 [6400/50000 (13%)]\tLoss: 0.153982\n",
      "Train Epoch: 43 [12800/50000 (26%)]\tLoss: 0.107482\n",
      "Train Epoch: 43 [19200/50000 (38%)]\tLoss: 0.109695\n",
      "Train Epoch: 43 [25600/50000 (51%)]\tLoss: 0.125934\n",
      "Train Epoch: 43 [32000/50000 (64%)]\tLoss: 0.119747\n",
      "Train Epoch: 43 [38400/50000 (77%)]\tLoss: 0.138061\n",
      "Train Epoch: 43 [44800/50000 (90%)]\tLoss: 0.173595\n",
      "Train Epoch: 44 [0/50000 (0%)]\tLoss: 0.000711\n",
      "Train Epoch: 44 [6400/50000 (13%)]\tLoss: 0.144040\n",
      "Train Epoch: 44 [12800/50000 (26%)]\tLoss: 0.133678\n",
      "Train Epoch: 44 [19200/50000 (38%)]\tLoss: 0.114648\n",
      "Train Epoch: 44 [25600/50000 (51%)]\tLoss: 0.114834\n",
      "Train Epoch: 44 [32000/50000 (64%)]\tLoss: 0.154799\n",
      "Train Epoch: 44 [38400/50000 (77%)]\tLoss: 0.132718\n",
      "Train Epoch: 44 [44800/50000 (90%)]\tLoss: 0.134699\n",
      "Train Epoch: 45 [0/50000 (0%)]\tLoss: 0.000512\n",
      "Train Epoch: 45 [6400/50000 (13%)]\tLoss: 0.105669\n",
      "Train Epoch: 45 [12800/50000 (26%)]\tLoss: 0.095914\n",
      "Train Epoch: 45 [19200/50000 (38%)]\tLoss: 0.115061\n",
      "Train Epoch: 45 [25600/50000 (51%)]\tLoss: 0.077058\n",
      "Train Epoch: 45 [32000/50000 (64%)]\tLoss: 0.111004\n",
      "Train Epoch: 45 [38400/50000 (77%)]\tLoss: 0.154395\n",
      "Train Epoch: 45 [44800/50000 (90%)]\tLoss: 0.164022\n",
      "Train Epoch: 46 [0/50000 (0%)]\tLoss: 0.000702\n",
      "Train Epoch: 46 [6400/50000 (13%)]\tLoss: 0.109588\n",
      "Train Epoch: 46 [12800/50000 (26%)]\tLoss: 0.081389\n",
      "Train Epoch: 46 [19200/50000 (38%)]\tLoss: 0.081513\n",
      "Train Epoch: 46 [25600/50000 (51%)]\tLoss: 0.088913\n",
      "Train Epoch: 46 [32000/50000 (64%)]\tLoss: 0.121365\n",
      "Train Epoch: 46 [38400/50000 (77%)]\tLoss: 0.087992\n",
      "Train Epoch: 46 [44800/50000 (90%)]\tLoss: 0.091465\n",
      "Train Epoch: 47 [0/50000 (0%)]\tLoss: 0.000885\n",
      "Train Epoch: 47 [6400/50000 (13%)]\tLoss: 0.080179\n",
      "Train Epoch: 47 [12800/50000 (26%)]\tLoss: 0.107891\n",
      "Train Epoch: 47 [19200/50000 (38%)]\tLoss: 0.102590\n",
      "Train Epoch: 47 [25600/50000 (51%)]\tLoss: 0.095150\n",
      "Train Epoch: 47 [32000/50000 (64%)]\tLoss: 0.094994\n",
      "Train Epoch: 47 [38400/50000 (77%)]\tLoss: 0.086628\n",
      "Train Epoch: 47 [44800/50000 (90%)]\tLoss: 0.103299\n",
      "Train Epoch: 48 [0/50000 (0%)]\tLoss: 0.000543\n",
      "Train Epoch: 48 [6400/50000 (13%)]\tLoss: 0.096577\n",
      "Train Epoch: 48 [12800/50000 (26%)]\tLoss: 0.069901\n",
      "Train Epoch: 48 [19200/50000 (38%)]\tLoss: 0.070645\n",
      "Train Epoch: 48 [25600/50000 (51%)]\tLoss: 0.113423\n",
      "Train Epoch: 48 [32000/50000 (64%)]\tLoss: 0.099281\n",
      "Train Epoch: 48 [38400/50000 (77%)]\tLoss: 0.114728\n",
      "Train Epoch: 48 [44800/50000 (90%)]\tLoss: 0.106147\n",
      "Train Epoch: 49 [0/50000 (0%)]\tLoss: 0.000453\n",
      "Train Epoch: 49 [6400/50000 (13%)]\tLoss: 0.110253\n",
      "Train Epoch: 49 [12800/50000 (26%)]\tLoss: 0.081091\n",
      "Train Epoch: 49 [19200/50000 (38%)]\tLoss: 0.099592\n",
      "Train Epoch: 49 [25600/50000 (51%)]\tLoss: 0.103292\n",
      "Train Epoch: 49 [32000/50000 (64%)]\tLoss: 0.121861\n",
      "Train Epoch: 49 [38400/50000 (77%)]\tLoss: 0.150941\n",
      "Train Epoch: 49 [44800/50000 (90%)]\tLoss: 0.152818\n",
      "Train Epoch: 50 [0/50000 (0%)]\tLoss: 0.001592\n",
      "Train Epoch: 50 [6400/50000 (13%)]\tLoss: 0.210919\n",
      "Train Epoch: 50 [12800/50000 (26%)]\tLoss: 0.132550\n",
      "Train Epoch: 50 [19200/50000 (38%)]\tLoss: 0.127116\n",
      "Train Epoch: 50 [25600/50000 (51%)]\tLoss: 0.119465\n",
      "Train Epoch: 50 [32000/50000 (64%)]\tLoss: 0.146700\n",
      "Train Epoch: 50 [38400/50000 (77%)]\tLoss: 0.123370\n",
      "Train Epoch: 50 [44800/50000 (90%)]\tLoss: 0.167195\n",
      "Model saved as model_50.pth\n",
      "Train Epoch: 51 [0/50000 (0%)]\tLoss: 0.000935\n",
      "Train Epoch: 51 [6400/50000 (13%)]\tLoss: 0.113316\n",
      "Train Epoch: 51 [12800/50000 (26%)]\tLoss: 0.087838\n",
      "Train Epoch: 51 [19200/50000 (38%)]\tLoss: 0.083779\n",
      "Train Epoch: 51 [25600/50000 (51%)]\tLoss: 0.104833\n",
      "Train Epoch: 51 [32000/50000 (64%)]\tLoss: 0.128123\n",
      "Train Epoch: 51 [38400/50000 (77%)]\tLoss: 0.153674\n",
      "Train Epoch: 51 [44800/50000 (90%)]\tLoss: 0.139334\n",
      "Train Epoch: 52 [0/50000 (0%)]\tLoss: 0.001318\n",
      "Train Epoch: 52 [6400/50000 (13%)]\tLoss: 0.106390\n",
      "Train Epoch: 52 [12800/50000 (26%)]\tLoss: 0.125746\n",
      "Train Epoch: 52 [19200/50000 (38%)]\tLoss: 0.133241\n",
      "Train Epoch: 52 [25600/50000 (51%)]\tLoss: 0.171644\n",
      "Train Epoch: 52 [32000/50000 (64%)]\tLoss: 0.137290\n",
      "Train Epoch: 52 [38400/50000 (77%)]\tLoss: 0.119304\n",
      "Train Epoch: 52 [44800/50000 (90%)]\tLoss: 0.131445\n",
      "Train Epoch: 53 [0/50000 (0%)]\tLoss: 0.001345\n",
      "Train Epoch: 53 [6400/50000 (13%)]\tLoss: 0.096209\n",
      "Train Epoch: 53 [12800/50000 (26%)]\tLoss: 0.089221\n",
      "Train Epoch: 53 [19200/50000 (38%)]\tLoss: 0.095884\n",
      "Train Epoch: 53 [25600/50000 (51%)]\tLoss: 0.090914\n",
      "Train Epoch: 53 [32000/50000 (64%)]\tLoss: 0.116663\n",
      "Train Epoch: 53 [38400/50000 (77%)]\tLoss: 0.121328\n",
      "Train Epoch: 53 [44800/50000 (90%)]\tLoss: 0.117560\n",
      "Train Epoch: 54 [0/50000 (0%)]\tLoss: 0.000927\n",
      "Train Epoch: 54 [6400/50000 (13%)]\tLoss: 0.077432\n",
      "Train Epoch: 54 [12800/50000 (26%)]\tLoss: 0.076323\n",
      "Train Epoch: 54 [19200/50000 (38%)]\tLoss: 0.098506\n",
      "Train Epoch: 54 [25600/50000 (51%)]\tLoss: 0.076765\n",
      "Train Epoch: 54 [32000/50000 (64%)]\tLoss: 0.106284\n",
      "Train Epoch: 54 [38400/50000 (77%)]\tLoss: 0.100733\n",
      "Train Epoch: 54 [44800/50000 (90%)]\tLoss: 0.109278\n",
      "Train Epoch: 55 [0/50000 (0%)]\tLoss: 0.000716\n",
      "Train Epoch: 55 [6400/50000 (13%)]\tLoss: 0.079452\n",
      "Train Epoch: 55 [12800/50000 (26%)]\tLoss: 0.074615\n",
      "Train Epoch: 55 [19200/50000 (38%)]\tLoss: 0.099959\n",
      "Train Epoch: 55 [25600/50000 (51%)]\tLoss: 0.089254\n",
      "Train Epoch: 55 [32000/50000 (64%)]\tLoss: 0.094164\n",
      "Train Epoch: 55 [38400/50000 (77%)]\tLoss: 0.134640\n",
      "Train Epoch: 55 [44800/50000 (90%)]\tLoss: 0.093848\n",
      "Train Epoch: 56 [0/50000 (0%)]\tLoss: 0.003109\n",
      "Train Epoch: 56 [6400/50000 (13%)]\tLoss: 0.086191\n",
      "Train Epoch: 56 [12800/50000 (26%)]\tLoss: 0.072090\n",
      "Train Epoch: 56 [19200/50000 (38%)]\tLoss: 0.068155\n",
      "Train Epoch: 56 [25600/50000 (51%)]\tLoss: 0.086095\n",
      "Train Epoch: 56 [32000/50000 (64%)]\tLoss: 0.075773\n",
      "Train Epoch: 56 [38400/50000 (77%)]\tLoss: 0.092715\n",
      "Train Epoch: 56 [44800/50000 (90%)]\tLoss: 0.089994\n",
      "Train Epoch: 57 [0/50000 (0%)]\tLoss: 0.000411\n",
      "Train Epoch: 57 [6400/50000 (13%)]\tLoss: 0.079243\n",
      "Train Epoch: 57 [12800/50000 (26%)]\tLoss: 0.099112\n",
      "Train Epoch: 57 [19200/50000 (38%)]\tLoss: 0.089896\n",
      "Train Epoch: 57 [25600/50000 (51%)]\tLoss: 0.080085\n",
      "Train Epoch: 57 [32000/50000 (64%)]\tLoss: 0.091725\n",
      "Train Epoch: 57 [38400/50000 (77%)]\tLoss: 0.064425\n",
      "Train Epoch: 57 [44800/50000 (90%)]\tLoss: 0.079779\n",
      "Train Epoch: 58 [0/50000 (0%)]\tLoss: 0.000166\n",
      "Train Epoch: 58 [6400/50000 (13%)]\tLoss: 0.066271\n",
      "Train Epoch: 58 [12800/50000 (26%)]\tLoss: 0.065896\n",
      "Train Epoch: 58 [19200/50000 (38%)]\tLoss: 0.059358\n",
      "Train Epoch: 58 [25600/50000 (51%)]\tLoss: 0.063373\n",
      "Train Epoch: 58 [32000/50000 (64%)]\tLoss: 0.073621\n",
      "Train Epoch: 58 [38400/50000 (77%)]\tLoss: 0.082079\n",
      "Train Epoch: 58 [44800/50000 (90%)]\tLoss: 0.101391\n",
      "Train Epoch: 59 [0/50000 (0%)]\tLoss: 0.001759\n",
      "Train Epoch: 59 [6400/50000 (13%)]\tLoss: 0.104408\n",
      "Train Epoch: 59 [12800/50000 (26%)]\tLoss: 0.091348\n",
      "Train Epoch: 59 [19200/50000 (38%)]\tLoss: 0.087289\n",
      "Train Epoch: 59 [25600/50000 (51%)]\tLoss: 0.098808\n",
      "Train Epoch: 59 [32000/50000 (64%)]\tLoss: 0.077671\n",
      "Train Epoch: 59 [38400/50000 (77%)]\tLoss: 0.098317\n",
      "Train Epoch: 59 [44800/50000 (90%)]\tLoss: 0.176562\n",
      "Train Epoch: 60 [0/50000 (0%)]\tLoss: 0.001820\n",
      "Train Epoch: 60 [6400/50000 (13%)]\tLoss: 0.080831\n",
      "Train Epoch: 60 [12800/50000 (26%)]\tLoss: 0.111625\n",
      "Train Epoch: 60 [19200/50000 (38%)]\tLoss: 0.116821\n",
      "Train Epoch: 60 [25600/50000 (51%)]\tLoss: 0.116715\n",
      "Train Epoch: 60 [32000/50000 (64%)]\tLoss: 0.100143\n",
      "Train Epoch: 60 [38400/50000 (77%)]\tLoss: 0.126931\n",
      "Train Epoch: 60 [44800/50000 (90%)]\tLoss: 0.137794\n",
      "Model saved as model_60.pth\n",
      "Train Epoch: 61 [0/50000 (0%)]\tLoss: 0.000918\n",
      "Train Epoch: 61 [6400/50000 (13%)]\tLoss: 0.093550\n",
      "Train Epoch: 61 [12800/50000 (26%)]\tLoss: 0.113172\n",
      "Train Epoch: 61 [19200/50000 (38%)]\tLoss: 0.086345\n",
      "Train Epoch: 61 [25600/50000 (51%)]\tLoss: 0.116481\n",
      "Train Epoch: 61 [32000/50000 (64%)]\tLoss: 0.133631\n",
      "Train Epoch: 61 [38400/50000 (77%)]\tLoss: 0.159651\n",
      "Train Epoch: 61 [44800/50000 (90%)]\tLoss: 0.201734\n",
      "Train Epoch: 62 [0/50000 (0%)]\tLoss: 0.001199\n",
      "Train Epoch: 62 [6400/50000 (13%)]\tLoss: 0.098192\n",
      "Train Epoch: 62 [12800/50000 (26%)]\tLoss: 0.077050\n",
      "Train Epoch: 62 [19200/50000 (38%)]\tLoss: 0.096886\n",
      "Train Epoch: 62 [25600/50000 (51%)]\tLoss: 0.123763\n",
      "Train Epoch: 62 [32000/50000 (64%)]\tLoss: 0.120116\n",
      "Train Epoch: 62 [38400/50000 (77%)]\tLoss: 0.112416\n",
      "Train Epoch: 62 [44800/50000 (90%)]\tLoss: 0.141517\n",
      "Train Epoch: 63 [0/50000 (0%)]\tLoss: 0.001720\n",
      "Train Epoch: 63 [6400/50000 (13%)]\tLoss: 0.113852\n",
      "Train Epoch: 63 [12800/50000 (26%)]\tLoss: 0.101617\n",
      "Train Epoch: 63 [19200/50000 (38%)]\tLoss: 0.101778\n",
      "Train Epoch: 63 [25600/50000 (51%)]\tLoss: 0.088798\n",
      "Train Epoch: 63 [32000/50000 (64%)]\tLoss: 0.092988\n",
      "Train Epoch: 63 [38400/50000 (77%)]\tLoss: 0.111090\n",
      "Train Epoch: 63 [44800/50000 (90%)]\tLoss: 0.173367\n",
      "Train Epoch: 64 [0/50000 (0%)]\tLoss: 0.000875\n",
      "Train Epoch: 64 [6400/50000 (13%)]\tLoss: 0.097931\n",
      "Train Epoch: 64 [12800/50000 (26%)]\tLoss: 0.103590\n",
      "Train Epoch: 64 [19200/50000 (38%)]\tLoss: 0.097728\n",
      "Train Epoch: 64 [25600/50000 (51%)]\tLoss: 0.089150\n",
      "Train Epoch: 64 [32000/50000 (64%)]\tLoss: 0.114228\n",
      "Train Epoch: 64 [38400/50000 (77%)]\tLoss: 0.127920\n",
      "Train Epoch: 64 [44800/50000 (90%)]\tLoss: 0.115620\n",
      "Train Epoch: 65 [0/50000 (0%)]\tLoss: 0.001180\n",
      "Train Epoch: 65 [6400/50000 (13%)]\tLoss: 0.136436\n",
      "Train Epoch: 65 [12800/50000 (26%)]\tLoss: 0.103153\n",
      "Train Epoch: 65 [19200/50000 (38%)]\tLoss: 0.101765\n",
      "Train Epoch: 65 [25600/50000 (51%)]\tLoss: 0.100350\n",
      "Train Epoch: 65 [32000/50000 (64%)]\tLoss: 0.104551\n",
      "Train Epoch: 65 [38400/50000 (77%)]\tLoss: 0.128727\n",
      "Train Epoch: 65 [44800/50000 (90%)]\tLoss: 0.127725\n",
      "Train Epoch: 66 [0/50000 (0%)]\tLoss: 0.000517\n",
      "Train Epoch: 66 [6400/50000 (13%)]\tLoss: 0.105242\n",
      "Train Epoch: 66 [12800/50000 (26%)]\tLoss: 0.080866\n",
      "Train Epoch: 66 [19200/50000 (38%)]\tLoss: 0.076676\n",
      "Train Epoch: 66 [25600/50000 (51%)]\tLoss: 0.091130\n",
      "Train Epoch: 66 [32000/50000 (64%)]\tLoss: 0.084497\n",
      "Train Epoch: 66 [38400/50000 (77%)]\tLoss: 0.090952\n",
      "Train Epoch: 66 [44800/50000 (90%)]\tLoss: 0.087032\n",
      "Train Epoch: 67 [0/50000 (0%)]\tLoss: 0.000922\n",
      "Train Epoch: 67 [6400/50000 (13%)]\tLoss: 0.060145\n",
      "Train Epoch: 67 [12800/50000 (26%)]\tLoss: 0.062021\n",
      "Train Epoch: 67 [19200/50000 (38%)]\tLoss: 0.070981\n",
      "Train Epoch: 67 [25600/50000 (51%)]\tLoss: 0.094134\n",
      "Train Epoch: 67 [32000/50000 (64%)]\tLoss: 0.096318\n",
      "Train Epoch: 67 [38400/50000 (77%)]\tLoss: 0.097341\n",
      "Train Epoch: 67 [44800/50000 (90%)]\tLoss: 0.142679\n",
      "Train Epoch: 68 [0/50000 (0%)]\tLoss: 0.001858\n",
      "Train Epoch: 68 [6400/50000 (13%)]\tLoss: 0.072426\n",
      "Train Epoch: 68 [12800/50000 (26%)]\tLoss: 0.073797\n",
      "Train Epoch: 68 [19200/50000 (38%)]\tLoss: 0.072876\n",
      "Train Epoch: 68 [25600/50000 (51%)]\tLoss: 0.064834\n",
      "Train Epoch: 68 [32000/50000 (64%)]\tLoss: 0.082134\n",
      "Train Epoch: 68 [38400/50000 (77%)]\tLoss: 0.084348\n",
      "Train Epoch: 68 [44800/50000 (90%)]\tLoss: 0.105477\n",
      "Train Epoch: 69 [0/50000 (0%)]\tLoss: 0.000716\n",
      "Train Epoch: 69 [6400/50000 (13%)]\tLoss: 0.067883\n",
      "Train Epoch: 69 [12800/50000 (26%)]\tLoss: 0.067159\n",
      "Train Epoch: 69 [19200/50000 (38%)]\tLoss: 0.063326\n",
      "Train Epoch: 69 [25600/50000 (51%)]\tLoss: 0.051994\n",
      "Train Epoch: 69 [32000/50000 (64%)]\tLoss: 0.062892\n",
      "Train Epoch: 69 [38400/50000 (77%)]\tLoss: 0.072740\n",
      "Train Epoch: 69 [44800/50000 (90%)]\tLoss: 0.119420\n",
      "Train Epoch: 70 [0/50000 (0%)]\tLoss: 0.000546\n",
      "Train Epoch: 70 [6400/50000 (13%)]\tLoss: 0.077794\n",
      "Train Epoch: 70 [12800/50000 (26%)]\tLoss: 0.057870\n",
      "Train Epoch: 70 [19200/50000 (38%)]\tLoss: 0.090405\n",
      "Train Epoch: 70 [25600/50000 (51%)]\tLoss: 0.064486\n",
      "Train Epoch: 70 [32000/50000 (64%)]\tLoss: 0.082909\n",
      "Train Epoch: 70 [38400/50000 (77%)]\tLoss: 0.061715\n",
      "Train Epoch: 70 [44800/50000 (90%)]\tLoss: 0.087036\n",
      "Model saved as model_70.pth\n",
      "Train Epoch: 71 [0/50000 (0%)]\tLoss: 0.000405\n",
      "Train Epoch: 71 [6400/50000 (13%)]\tLoss: 0.071600\n",
      "Train Epoch: 71 [12800/50000 (26%)]\tLoss: 0.064667\n",
      "Train Epoch: 71 [19200/50000 (38%)]\tLoss: 0.046506\n",
      "Train Epoch: 71 [25600/50000 (51%)]\tLoss: 0.047325\n",
      "Train Epoch: 71 [32000/50000 (64%)]\tLoss: 0.069632\n",
      "Train Epoch: 71 [38400/50000 (77%)]\tLoss: 0.087785\n",
      "Train Epoch: 71 [44800/50000 (90%)]\tLoss: 0.081516\n",
      "Train Epoch: 72 [0/50000 (0%)]\tLoss: 0.000461\n",
      "Train Epoch: 72 [6400/50000 (13%)]\tLoss: 0.103225\n",
      "Train Epoch: 72 [12800/50000 (26%)]\tLoss: 0.088744\n",
      "Train Epoch: 72 [19200/50000 (38%)]\tLoss: 0.077272\n",
      "Train Epoch: 72 [25600/50000 (51%)]\tLoss: 0.065976\n",
      "Train Epoch: 72 [32000/50000 (64%)]\tLoss: 0.078455\n",
      "Train Epoch: 72 [38400/50000 (77%)]\tLoss: 0.112014\n",
      "Train Epoch: 72 [44800/50000 (90%)]\tLoss: 0.109101\n",
      "Train Epoch: 73 [0/50000 (0%)]\tLoss: 0.001134\n",
      "Train Epoch: 73 [6400/50000 (13%)]\tLoss: 0.093572\n",
      "Train Epoch: 73 [12800/50000 (26%)]\tLoss: 0.102434\n",
      "Train Epoch: 73 [19200/50000 (38%)]\tLoss: 0.100743\n",
      "Train Epoch: 73 [25600/50000 (51%)]\tLoss: 0.119402\n",
      "Train Epoch: 73 [32000/50000 (64%)]\tLoss: 0.131308\n",
      "Train Epoch: 73 [38400/50000 (77%)]\tLoss: 0.137790\n",
      "Train Epoch: 73 [44800/50000 (90%)]\tLoss: 0.123150\n",
      "Train Epoch: 74 [0/50000 (0%)]\tLoss: 0.001415\n",
      "Train Epoch: 74 [6400/50000 (13%)]\tLoss: 0.142989\n",
      "Train Epoch: 74 [12800/50000 (26%)]\tLoss: 0.113257\n",
      "Train Epoch: 74 [19200/50000 (38%)]\tLoss: 0.161081\n",
      "Train Epoch: 74 [25600/50000 (51%)]\tLoss: 0.161392\n",
      "Train Epoch: 74 [32000/50000 (64%)]\tLoss: 0.148774\n",
      "Train Epoch: 74 [38400/50000 (77%)]\tLoss: 0.169533\n",
      "Train Epoch: 74 [44800/50000 (90%)]\tLoss: 0.181170\n",
      "Train Epoch: 75 [0/50000 (0%)]\tLoss: 0.000966\n",
      "Train Epoch: 75 [6400/50000 (13%)]\tLoss: 0.168507\n",
      "Train Epoch: 75 [12800/50000 (26%)]\tLoss: 0.106041\n",
      "Train Epoch: 75 [19200/50000 (38%)]\tLoss: 0.118304\n",
      "Train Epoch: 75 [25600/50000 (51%)]\tLoss: 0.108553\n",
      "Train Epoch: 75 [32000/50000 (64%)]\tLoss: 0.097311\n",
      "Train Epoch: 75 [38400/50000 (77%)]\tLoss: 0.091843\n",
      "Train Epoch: 75 [44800/50000 (90%)]\tLoss: 0.143989\n",
      "Train Epoch: 76 [0/50000 (0%)]\tLoss: 0.001221\n",
      "Train Epoch: 76 [6400/50000 (13%)]\tLoss: 0.073606\n",
      "Train Epoch: 76 [12800/50000 (26%)]\tLoss: 0.049642\n",
      "Train Epoch: 76 [19200/50000 (38%)]\tLoss: 0.045518\n",
      "Train Epoch: 76 [25600/50000 (51%)]\tLoss: 0.052696\n",
      "Train Epoch: 76 [32000/50000 (64%)]\tLoss: 0.088972\n",
      "Train Epoch: 76 [38400/50000 (77%)]\tLoss: 0.088573\n",
      "Train Epoch: 76 [44800/50000 (90%)]\tLoss: 0.104498\n",
      "Train Epoch: 77 [0/50000 (0%)]\tLoss: 0.000663\n",
      "Train Epoch: 77 [6400/50000 (13%)]\tLoss: 0.075431\n",
      "Train Epoch: 77 [12800/50000 (26%)]\tLoss: 0.074177\n",
      "Train Epoch: 77 [19200/50000 (38%)]\tLoss: 0.087835\n",
      "Train Epoch: 77 [25600/50000 (51%)]\tLoss: 0.073388\n",
      "Train Epoch: 77 [32000/50000 (64%)]\tLoss: 0.080102\n",
      "Train Epoch: 77 [38400/50000 (77%)]\tLoss: 0.082102\n",
      "Train Epoch: 77 [44800/50000 (90%)]\tLoss: 0.107045\n",
      "Train Epoch: 78 [0/50000 (0%)]\tLoss: 0.001356\n",
      "Train Epoch: 78 [6400/50000 (13%)]\tLoss: 0.068143\n",
      "Train Epoch: 78 [12800/50000 (26%)]\tLoss: 0.082333\n",
      "Train Epoch: 78 [19200/50000 (38%)]\tLoss: 0.077259\n",
      "Train Epoch: 78 [25600/50000 (51%)]\tLoss: 0.078965\n",
      "Train Epoch: 78 [32000/50000 (64%)]\tLoss: 0.101407\n",
      "Train Epoch: 78 [38400/50000 (77%)]\tLoss: 0.123778\n",
      "Train Epoch: 78 [44800/50000 (90%)]\tLoss: 0.120678\n",
      "Train Epoch: 79 [0/50000 (0%)]\tLoss: 0.000725\n",
      "Train Epoch: 79 [6400/50000 (13%)]\tLoss: 0.088897\n",
      "Train Epoch: 79 [12800/50000 (26%)]\tLoss: 0.063088\n",
      "Train Epoch: 79 [19200/50000 (38%)]\tLoss: 0.065835\n",
      "Train Epoch: 79 [25600/50000 (51%)]\tLoss: 0.063479\n",
      "Train Epoch: 79 [32000/50000 (64%)]\tLoss: 0.071442\n",
      "Train Epoch: 79 [38400/50000 (77%)]\tLoss: 0.068304\n",
      "Train Epoch: 79 [44800/50000 (90%)]\tLoss: 0.070380\n",
      "Train Epoch: 80 [0/50000 (0%)]\tLoss: 0.003248\n",
      "Train Epoch: 80 [6400/50000 (13%)]\tLoss: 0.067190\n",
      "Train Epoch: 80 [12800/50000 (26%)]\tLoss: 0.068263\n",
      "Train Epoch: 80 [19200/50000 (38%)]\tLoss: 0.094823\n",
      "Train Epoch: 80 [25600/50000 (51%)]\tLoss: 0.072478\n",
      "Train Epoch: 80 [32000/50000 (64%)]\tLoss: 0.060931\n",
      "Train Epoch: 80 [38400/50000 (77%)]\tLoss: 0.067850\n",
      "Train Epoch: 80 [44800/50000 (90%)]\tLoss: 0.063203\n",
      "Model saved as model_80.pth\n",
      "Train Epoch: 81 [0/50000 (0%)]\tLoss: 0.000217\n",
      "Train Epoch: 81 [6400/50000 (13%)]\tLoss: 0.041432\n",
      "Train Epoch: 81 [12800/50000 (26%)]\tLoss: 0.026149\n",
      "Train Epoch: 81 [19200/50000 (38%)]\tLoss: 0.034785\n",
      "Train Epoch: 81 [25600/50000 (51%)]\tLoss: 0.031303\n",
      "Train Epoch: 81 [32000/50000 (64%)]\tLoss: 0.038850\n",
      "Train Epoch: 81 [38400/50000 (77%)]\tLoss: 0.026052\n",
      "Train Epoch: 81 [44800/50000 (90%)]\tLoss: 0.034537\n",
      "Train Epoch: 82 [0/50000 (0%)]\tLoss: 0.000162\n",
      "Train Epoch: 82 [6400/50000 (13%)]\tLoss: 0.018149\n",
      "Train Epoch: 82 [12800/50000 (26%)]\tLoss: 0.015548\n",
      "Train Epoch: 82 [19200/50000 (38%)]\tLoss: 0.020808\n",
      "Train Epoch: 82 [25600/50000 (51%)]\tLoss: 0.015713\n",
      "Train Epoch: 82 [32000/50000 (64%)]\tLoss: 0.015261\n",
      "Train Epoch: 82 [38400/50000 (77%)]\tLoss: 0.022253\n",
      "Train Epoch: 82 [44800/50000 (90%)]\tLoss: 0.020054\n",
      "Train Epoch: 83 [0/50000 (0%)]\tLoss: 0.000109\n",
      "Train Epoch: 83 [6400/50000 (13%)]\tLoss: 0.008140\n",
      "Train Epoch: 83 [12800/50000 (26%)]\tLoss: 0.007087\n",
      "Train Epoch: 83 [19200/50000 (38%)]\tLoss: 0.006234\n",
      "Train Epoch: 83 [25600/50000 (51%)]\tLoss: 0.006976\n",
      "Train Epoch: 83 [32000/50000 (64%)]\tLoss: 0.009746\n",
      "Train Epoch: 83 [38400/50000 (77%)]\tLoss: 0.008434\n",
      "Train Epoch: 83 [44800/50000 (90%)]\tLoss: 0.006273\n",
      "Train Epoch: 84 [0/50000 (0%)]\tLoss: 0.000061\n",
      "Train Epoch: 84 [6400/50000 (13%)]\tLoss: 0.004451\n",
      "Train Epoch: 84 [12800/50000 (26%)]\tLoss: 0.004564\n",
      "Train Epoch: 84 [19200/50000 (38%)]\tLoss: 0.004183\n",
      "Train Epoch: 84 [25600/50000 (51%)]\tLoss: 0.004233\n",
      "Train Epoch: 84 [32000/50000 (64%)]\tLoss: 0.003986\n",
      "Train Epoch: 84 [38400/50000 (77%)]\tLoss: 0.004114\n",
      "Train Epoch: 84 [44800/50000 (90%)]\tLoss: 0.004482\n",
      "Train Epoch: 85 [0/50000 (0%)]\tLoss: 0.000025\n",
      "Train Epoch: 85 [6400/50000 (13%)]\tLoss: 0.003151\n",
      "Train Epoch: 85 [12800/50000 (26%)]\tLoss: 0.003319\n",
      "Train Epoch: 85 [19200/50000 (38%)]\tLoss: 0.003434\n",
      "Train Epoch: 85 [25600/50000 (51%)]\tLoss: 0.004218\n",
      "Train Epoch: 85 [32000/50000 (64%)]\tLoss: 0.003761\n",
      "Train Epoch: 85 [38400/50000 (77%)]\tLoss: 0.003608\n",
      "Train Epoch: 85 [44800/50000 (90%)]\tLoss: 0.003422\n",
      "Train Epoch: 86 [0/50000 (0%)]\tLoss: 0.000021\n",
      "Train Epoch: 86 [6400/50000 (13%)]\tLoss: 0.002869\n",
      "Train Epoch: 86 [12800/50000 (26%)]\tLoss: 0.003050\n",
      "Train Epoch: 86 [19200/50000 (38%)]\tLoss: 0.002754\n",
      "Train Epoch: 86 [25600/50000 (51%)]\tLoss: 0.003532\n",
      "Train Epoch: 86 [32000/50000 (64%)]\tLoss: 0.003494\n",
      "Train Epoch: 86 [38400/50000 (77%)]\tLoss: 0.002857\n",
      "Train Epoch: 86 [44800/50000 (90%)]\tLoss: 0.002910\n",
      "Train Epoch: 87 [0/50000 (0%)]\tLoss: 0.000016\n",
      "Train Epoch: 87 [6400/50000 (13%)]\tLoss: 0.002579\n",
      "Train Epoch: 87 [12800/50000 (26%)]\tLoss: 0.002604\n",
      "Train Epoch: 87 [19200/50000 (38%)]\tLoss: 0.002682\n",
      "Train Epoch: 87 [25600/50000 (51%)]\tLoss: 0.002656\n",
      "Train Epoch: 87 [32000/50000 (64%)]\tLoss: 0.002630\n",
      "Train Epoch: 87 [38400/50000 (77%)]\tLoss: 0.003486\n",
      "Train Epoch: 87 [44800/50000 (90%)]\tLoss: 0.002719\n",
      "Train Epoch: 88 [0/50000 (0%)]\tLoss: 0.000016\n",
      "Train Epoch: 88 [6400/50000 (13%)]\tLoss: 0.002250\n",
      "Train Epoch: 88 [12800/50000 (26%)]\tLoss: 0.002255\n",
      "Train Epoch: 88 [19200/50000 (38%)]\tLoss: 0.002366\n",
      "Train Epoch: 88 [25600/50000 (51%)]\tLoss: 0.002412\n",
      "Train Epoch: 88 [32000/50000 (64%)]\tLoss: 0.002570\n",
      "Train Epoch: 88 [38400/50000 (77%)]\tLoss: 0.002753\n",
      "Train Epoch: 88 [44800/50000 (90%)]\tLoss: 0.002676\n",
      "Train Epoch: 89 [0/50000 (0%)]\tLoss: 0.000021\n",
      "Train Epoch: 89 [6400/50000 (13%)]\tLoss: 0.002220\n",
      "Train Epoch: 89 [12800/50000 (26%)]\tLoss: 0.002128\n",
      "Train Epoch: 89 [19200/50000 (38%)]\tLoss: 0.002601\n",
      "Train Epoch: 89 [25600/50000 (51%)]\tLoss: 0.002383\n",
      "Train Epoch: 89 [32000/50000 (64%)]\tLoss: 0.002354\n",
      "Train Epoch: 89 [38400/50000 (77%)]\tLoss: 0.002462\n",
      "Train Epoch: 89 [44800/50000 (90%)]\tLoss: 0.002346\n",
      "Train Epoch: 90 [0/50000 (0%)]\tLoss: 0.000008\n",
      "Train Epoch: 90 [6400/50000 (13%)]\tLoss: 0.002335\n",
      "Train Epoch: 90 [12800/50000 (26%)]\tLoss: 0.002034\n",
      "Train Epoch: 90 [19200/50000 (38%)]\tLoss: 0.002225\n",
      "Train Epoch: 90 [25600/50000 (51%)]\tLoss: 0.002032\n",
      "Train Epoch: 90 [32000/50000 (64%)]\tLoss: 0.002185\n",
      "Train Epoch: 90 [38400/50000 (77%)]\tLoss: 0.002285\n",
      "Train Epoch: 90 [44800/50000 (90%)]\tLoss: 0.002242\n",
      "Model saved as model_90.pth\n",
      "Train Epoch: 91 [0/50000 (0%)]\tLoss: 0.000020\n",
      "Train Epoch: 91 [6400/50000 (13%)]\tLoss: 0.002260\n",
      "Train Epoch: 91 [12800/50000 (26%)]\tLoss: 0.002049\n",
      "Train Epoch: 91 [19200/50000 (38%)]\tLoss: 0.001859\n",
      "Train Epoch: 91 [25600/50000 (51%)]\tLoss: 0.002048\n",
      "Train Epoch: 91 [32000/50000 (64%)]\tLoss: 0.001995\n",
      "Train Epoch: 91 [38400/50000 (77%)]\tLoss: 0.002071\n",
      "Train Epoch: 91 [44800/50000 (90%)]\tLoss: 0.002138\n",
      "Train Epoch: 92 [0/50000 (0%)]\tLoss: 0.000017\n",
      "Train Epoch: 92 [6400/50000 (13%)]\tLoss: 0.001756\n",
      "Train Epoch: 92 [12800/50000 (26%)]\tLoss: 0.001804\n",
      "Train Epoch: 92 [19200/50000 (38%)]\tLoss: 0.001953\n",
      "Train Epoch: 92 [25600/50000 (51%)]\tLoss: 0.002279\n",
      "Train Epoch: 92 [32000/50000 (64%)]\tLoss: 0.001975\n",
      "Train Epoch: 92 [38400/50000 (77%)]\tLoss: 0.001981\n",
      "Train Epoch: 92 [44800/50000 (90%)]\tLoss: 0.001913\n",
      "Train Epoch: 93 [0/50000 (0%)]\tLoss: 0.000013\n",
      "Train Epoch: 93 [6400/50000 (13%)]\tLoss: 0.001719\n",
      "Train Epoch: 93 [12800/50000 (26%)]\tLoss: 0.001784\n",
      "Train Epoch: 93 [19200/50000 (38%)]\tLoss: 0.001803\n",
      "Train Epoch: 93 [25600/50000 (51%)]\tLoss: 0.001979\n",
      "Train Epoch: 93 [32000/50000 (64%)]\tLoss: 0.001743\n",
      "Train Epoch: 93 [38400/50000 (77%)]\tLoss: 0.001845\n",
      "Train Epoch: 93 [44800/50000 (90%)]\tLoss: 0.002036\n",
      "Train Epoch: 94 [0/50000 (0%)]\tLoss: 0.000014\n",
      "Train Epoch: 94 [6400/50000 (13%)]\tLoss: 0.001762\n",
      "Train Epoch: 94 [12800/50000 (26%)]\tLoss: 0.001648\n",
      "Train Epoch: 94 [19200/50000 (38%)]\tLoss: 0.001743\n",
      "Train Epoch: 94 [25600/50000 (51%)]\tLoss: 0.001803\n",
      "Train Epoch: 94 [32000/50000 (64%)]\tLoss: 0.001766\n",
      "Train Epoch: 94 [38400/50000 (77%)]\tLoss: 0.001795\n",
      "Train Epoch: 94 [44800/50000 (90%)]\tLoss: 0.001702\n",
      "Train Epoch: 95 [0/50000 (0%)]\tLoss: 0.000019\n",
      "Train Epoch: 95 [6400/50000 (13%)]\tLoss: 0.001686\n",
      "Train Epoch: 95 [12800/50000 (26%)]\tLoss: 0.001683\n",
      "Train Epoch: 95 [19200/50000 (38%)]\tLoss: 0.001682\n",
      "Train Epoch: 95 [25600/50000 (51%)]\tLoss: 0.001606\n",
      "Train Epoch: 95 [32000/50000 (64%)]\tLoss: 0.001674\n",
      "Train Epoch: 95 [38400/50000 (77%)]\tLoss: 0.001805\n",
      "Train Epoch: 95 [44800/50000 (90%)]\tLoss: 0.001680\n",
      "Train Epoch: 96 [0/50000 (0%)]\tLoss: 0.000009\n",
      "Train Epoch: 96 [6400/50000 (13%)]\tLoss: 0.001704\n",
      "Train Epoch: 96 [12800/50000 (26%)]\tLoss: 0.001540\n",
      "Train Epoch: 96 [19200/50000 (38%)]\tLoss: 0.001658\n",
      "Train Epoch: 96 [25600/50000 (51%)]\tLoss: 0.001667\n",
      "Train Epoch: 96 [32000/50000 (64%)]\tLoss: 0.001630\n",
      "Train Epoch: 96 [38400/50000 (77%)]\tLoss: 0.001511\n",
      "Train Epoch: 96 [44800/50000 (90%)]\tLoss: 0.001558\n",
      "Train Epoch: 97 [0/50000 (0%)]\tLoss: 0.000018\n",
      "Train Epoch: 97 [6400/50000 (13%)]\tLoss: 0.001510\n",
      "Train Epoch: 97 [12800/50000 (26%)]\tLoss: 0.001461\n",
      "Train Epoch: 97 [19200/50000 (38%)]\tLoss: 0.001501\n",
      "Train Epoch: 97 [25600/50000 (51%)]\tLoss: 0.001447\n",
      "Train Epoch: 97 [32000/50000 (64%)]\tLoss: 0.001634\n",
      "Train Epoch: 97 [38400/50000 (77%)]\tLoss: 0.001639\n",
      "Train Epoch: 97 [44800/50000 (90%)]\tLoss: 0.001657\n",
      "Train Epoch: 98 [0/50000 (0%)]\tLoss: 0.000010\n",
      "Train Epoch: 98 [6400/50000 (13%)]\tLoss: 0.001483\n",
      "Train Epoch: 98 [12800/50000 (26%)]\tLoss: 0.001532\n",
      "Train Epoch: 98 [19200/50000 (38%)]\tLoss: 0.001381\n",
      "Train Epoch: 98 [25600/50000 (51%)]\tLoss: 0.001611\n",
      "Train Epoch: 98 [32000/50000 (64%)]\tLoss: 0.001474\n",
      "Train Epoch: 98 [38400/50000 (77%)]\tLoss: 0.001513\n",
      "Train Epoch: 98 [44800/50000 (90%)]\tLoss: 0.001545\n",
      "Train Epoch: 99 [0/50000 (0%)]\tLoss: 0.000020\n",
      "Train Epoch: 99 [6400/50000 (13%)]\tLoss: 0.001438\n",
      "Train Epoch: 99 [12800/50000 (26%)]\tLoss: 0.001412\n",
      "Train Epoch: 99 [19200/50000 (38%)]\tLoss: 0.001402\n",
      "Train Epoch: 99 [25600/50000 (51%)]\tLoss: 0.001491\n",
      "Train Epoch: 99 [32000/50000 (64%)]\tLoss: 0.001441\n",
      "Train Epoch: 99 [38400/50000 (77%)]\tLoss: 0.001497\n",
      "Train Epoch: 99 [44800/50000 (90%)]\tLoss: 0.001444\n",
      "训练完成\n"
     ]
    }
   ],
   "source": [
    "# 训练模型\n",
    "num_epochs = 100\n",
    "net.train()\n",
    "\n",
    "for epoch in range(num_epochs):\n",
    "    running_loss = 0.0\n",
    "    for batch_idx, data in enumerate(trainloader):\n",
    "        inputs, labels = data\n",
    "        optimizer.zero_grad()\n",
    "        outputs = net(inputs.to(device))\n",
    "        loss = criterion(outputs, labels.to(device))\n",
    "        loss.backward()\n",
    "        optimizer.step()\n",
    "        running_loss += loss.item()\n",
    "        # print(batch_idx)\n",
    "        if batch_idx % 100 == 0:\n",
    "            print('Train Epoch: {} [{}/{} ({:.0f}%)]\\tLoss: {:.6f}'.format(\n",
    "                epoch, batch_idx * len(inputs), len(trainloader.dataset),\n",
    "                100. * batch_idx / len(trainloader), running_loss / 100))\n",
    "            running_loss = 0.0\n",
    "    # print(f\"Epoch {epoch + 1}, Loss: {running_loss / (batch_idx + 1)}\")\n",
    "    if epoch % 10 == 0:\n",
    "        torch.save(net.state_dict(), './checkpoints/my_model_{}.pth'.format(epoch))\n",
    "        print('Model saved as model_{}.pth'.format(epoch))\n",
    "\n",
    "print(\"训练完成\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "f69788e1",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "tensor([3, 4, 1, 5, 8, 2, 0, 8, 3, 7, 6, 5, 3, 2, 7, 5, 6, 2, 8, 2, 7, 1, 5, 8,\n",
      "        9, 2, 1, 4, 3, 4, 8, 3, 3, 3, 1, 3, 0, 3, 1, 3, 7, 2, 1, 2, 1, 7, 6, 8,\n",
      "        1, 7, 7, 3, 4, 1, 3, 5, 1, 0, 7, 5, 8, 1, 2, 4])\n"
     ]
    }
   ],
   "source": [
    "for imgs,targets in trainloader:\n",
    "    print(targets)\n",
    "    break\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "55c952bc",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "tensor([[ 0.0311, -0.0142,  0.0565,  0.0316,  0.1073, -0.0980,  0.0966,  0.0809,\n",
       "         -0.1159,  0.0856],\n",
       "        [ 0.0383, -0.0161,  0.0667,  0.0284,  0.1105, -0.0894,  0.0896,  0.0901,\n",
       "         -0.1077,  0.0809],\n",
       "        [ 0.0411, -0.0118,  0.0752,  0.0302,  0.1106, -0.0965,  0.1029,  0.0912,\n",
       "         -0.1157,  0.0859],\n",
       "        [ 0.0412, -0.0015,  0.0636,  0.0329,  0.1113, -0.0772,  0.1022,  0.1065,\n",
       "         -0.1325,  0.0554],\n",
       "        [ 0.0365, -0.0228,  0.0585,  0.0294,  0.1127, -0.0932,  0.0984,  0.0793,\n",
       "         -0.1039,  0.0819],\n",
       "        [ 0.0387, -0.0150,  0.0702,  0.0310,  0.1202, -0.0820,  0.1047,  0.1015,\n",
       "         -0.1298,  0.0717],\n",
       "        [ 0.0402, -0.0228,  0.0582,  0.0326,  0.1034, -0.0866,  0.0963,  0.0903,\n",
       "         -0.1216,  0.0884],\n",
       "        [ 0.0381, -0.0099,  0.0633,  0.0299,  0.1218, -0.0886,  0.1169,  0.0902,\n",
       "         -0.1083,  0.0896],\n",
       "        [ 0.0358, -0.0200,  0.0590,  0.0306,  0.1088, -0.0943,  0.0878,  0.0808,\n",
       "         -0.1154,  0.0804],\n",
       "        [ 0.0424, -0.0107,  0.0755,  0.0302,  0.1193, -0.0844,  0.1083,  0.0916,\n",
       "         -0.1224,  0.0760],\n",
       "        [ 0.0344, -0.0212,  0.0557,  0.0309,  0.1197, -0.0881,  0.1019,  0.0880,\n",
       "         -0.1227,  0.0788],\n",
       "        [ 0.0477, -0.0180,  0.0619,  0.0348,  0.1075, -0.0782,  0.1056,  0.0940,\n",
       "         -0.1301,  0.0854],\n",
       "        [ 0.0446, -0.0014,  0.0768,  0.0309,  0.1232, -0.0726,  0.1105,  0.0923,\n",
       "         -0.1509,  0.0619],\n",
       "        [ 0.0367, -0.0177,  0.0592,  0.0274,  0.1108, -0.0949,  0.1040,  0.0862,\n",
       "         -0.1072,  0.0947],\n",
       "        [ 0.0355,  0.0017,  0.0928,  0.0434,  0.1357, -0.0853,  0.0993,  0.0838,\n",
       "         -0.1226,  0.0743],\n",
       "        [ 0.0379, -0.0076,  0.0670,  0.0351,  0.1080, -0.1026,  0.0994,  0.0908,\n",
       "         -0.1107,  0.0846],\n",
       "        [ 0.0420, -0.0187,  0.0574,  0.0407,  0.1090, -0.1076,  0.1001,  0.0780,\n",
       "         -0.1003,  0.0807],\n",
       "        [ 0.0425, -0.0268,  0.0644,  0.0296,  0.1112, -0.0917,  0.1093,  0.1046,\n",
       "         -0.1265,  0.0844],\n",
       "        [ 0.0456, -0.0336,  0.0652,  0.0332,  0.1162, -0.0911,  0.1016,  0.0936,\n",
       "         -0.1223,  0.0806],\n",
       "        [ 0.0494, -0.0315,  0.0636,  0.0353,  0.1074, -0.0828,  0.1108,  0.0969,\n",
       "         -0.1367,  0.0778],\n",
       "        [ 0.0366, -0.0066,  0.0601,  0.0352,  0.1107, -0.0925,  0.0886,  0.0856,\n",
       "         -0.1013,  0.0828],\n",
       "        [ 0.0380, -0.0229,  0.0477,  0.0311,  0.1060, -0.0921,  0.0972,  0.0812,\n",
       "         -0.1041,  0.0850],\n",
       "        [ 0.0535, -0.0218,  0.0668,  0.0278,  0.1048, -0.0931,  0.1027,  0.1118,\n",
       "         -0.1314,  0.0915],\n",
       "        [ 0.0448, -0.0165,  0.0598,  0.0387,  0.1077, -0.0902,  0.1010,  0.0865,\n",
       "         -0.1159,  0.0878],\n",
       "        [ 0.0463, -0.0205,  0.0623,  0.0355,  0.1133, -0.0893,  0.1093,  0.0892,\n",
       "         -0.1198,  0.0876],\n",
       "        [ 0.0350, -0.0135,  0.0685,  0.0304,  0.1173, -0.0934,  0.0989,  0.0866,\n",
       "         -0.1168,  0.0795],\n",
       "        [ 0.0419, -0.0214,  0.0613,  0.0300,  0.1042, -0.0918,  0.0988,  0.0934,\n",
       "         -0.1154,  0.0834],\n",
       "        [ 0.0398,  0.0061,  0.0945,  0.0440,  0.1311, -0.0668,  0.1168,  0.1078,\n",
       "         -0.1435,  0.0634],\n",
       "        [ 0.0559, -0.0198,  0.0659,  0.0334,  0.1051, -0.0867,  0.1051,  0.1091,\n",
       "         -0.1340,  0.0905],\n",
       "        [ 0.0380, -0.0103,  0.0583,  0.0245,  0.1075, -0.0947,  0.0980,  0.0884,\n",
       "         -0.1045,  0.0903],\n",
       "        [ 0.0482, -0.0229,  0.0566,  0.0453,  0.1107, -0.0977,  0.1184,  0.0806,\n",
       "         -0.1139,  0.0981],\n",
       "        [ 0.0402, -0.0229,  0.0473,  0.0354,  0.1030, -0.0975,  0.0959,  0.0846,\n",
       "         -0.1166,  0.0866],\n",
       "        [ 0.0323, -0.0101,  0.0673,  0.0363,  0.1276, -0.0773,  0.1147,  0.0855,\n",
       "         -0.1297,  0.0762],\n",
       "        [ 0.0482, -0.0176,  0.0573,  0.0289,  0.1055, -0.0965,  0.0996,  0.0929,\n",
       "         -0.1256,  0.0780],\n",
       "        [ 0.0537, -0.0193,  0.0685,  0.0266,  0.1058, -0.0726,  0.0963,  0.1007,\n",
       "         -0.1325,  0.0814],\n",
       "        [ 0.0391, -0.0212,  0.0566,  0.0354,  0.1136, -0.0943,  0.0965,  0.0852,\n",
       "         -0.1196,  0.0881],\n",
       "        [ 0.0421, -0.0218,  0.0527,  0.0345,  0.1092, -0.0950,  0.0932,  0.0834,\n",
       "         -0.1171,  0.0853],\n",
       "        [ 0.0482, -0.0274,  0.0541,  0.0311,  0.1097, -0.0913,  0.1075,  0.1079,\n",
       "         -0.1315,  0.0819],\n",
       "        [ 0.0386, -0.0112,  0.0612,  0.0339,  0.1137, -0.0763,  0.1030,  0.0838,\n",
       "         -0.1129,  0.0833],\n",
       "        [ 0.0516, -0.0277,  0.0523,  0.0235,  0.1059, -0.0795,  0.0817,  0.0880,\n",
       "         -0.1271,  0.0878],\n",
       "        [ 0.0439, -0.0129,  0.0564,  0.0380,  0.1058, -0.1015,  0.0945,  0.0794,\n",
       "         -0.1019,  0.0908],\n",
       "        [ 0.0371, -0.0045,  0.0706,  0.0313,  0.1287, -0.0759,  0.1164,  0.0874,\n",
       "         -0.1266,  0.0738],\n",
       "        [ 0.0437, -0.0276,  0.0488,  0.0328,  0.1062, -0.0956,  0.1010,  0.0810,\n",
       "         -0.1199,  0.0902],\n",
       "        [ 0.0297, -0.0183,  0.0509,  0.0296,  0.1097, -0.0949,  0.0976,  0.0837,\n",
       "         -0.1032,  0.0845],\n",
       "        [ 0.0375, -0.0041,  0.0637,  0.0296,  0.1188, -0.0780,  0.1083,  0.0947,\n",
       "         -0.1258,  0.0760],\n",
       "        [ 0.0431, -0.0226,  0.0458,  0.0255,  0.1091, -0.0921,  0.0923,  0.0848,\n",
       "         -0.1158,  0.0837],\n",
       "        [ 0.0351, -0.0089,  0.0667,  0.0300,  0.1123, -0.0941,  0.0987,  0.0877,\n",
       "         -0.1184,  0.0828],\n",
       "        [ 0.0363, -0.0303,  0.0480,  0.0280,  0.1105, -0.1026,  0.1051,  0.0827,\n",
       "         -0.1020,  0.0823],\n",
       "        [ 0.0381, -0.0076,  0.0662,  0.0343,  0.1086, -0.0845,  0.0980,  0.0879,\n",
       "         -0.1175,  0.0787],\n",
       "        [ 0.0360, -0.0119,  0.0651,  0.0336,  0.1201, -0.0801,  0.1099,  0.0917,\n",
       "         -0.1118,  0.0801],\n",
       "        [ 0.0449, -0.0263,  0.0645,  0.0350,  0.1034, -0.0856,  0.1033,  0.0869,\n",
       "         -0.1186,  0.0781],\n",
       "        [ 0.0503, -0.0445,  0.0516,  0.0349,  0.1047, -0.0967,  0.1030,  0.1012,\n",
       "         -0.1237,  0.0877],\n",
       "        [ 0.0421, -0.0228,  0.0500,  0.0346,  0.1064, -0.0929,  0.1026,  0.1037,\n",
       "         -0.1306,  0.0832],\n",
       "        [ 0.0332, -0.0213,  0.0753,  0.0217,  0.1126, -0.0919,  0.0923,  0.0935,\n",
       "         -0.1361,  0.0739],\n",
       "        [ 0.0369, -0.0196,  0.0644,  0.0338,  0.1133, -0.0931,  0.1059,  0.0860,\n",
       "         -0.1209,  0.0814],\n",
       "        [ 0.0386, -0.0223,  0.0537,  0.0334,  0.1094, -0.0956,  0.1036,  0.0891,\n",
       "         -0.1149,  0.0878],\n",
       "        [ 0.0487, -0.0383,  0.0510,  0.0315,  0.1009, -0.1069,  0.0935,  0.0868,\n",
       "         -0.1185,  0.0870],\n",
       "        [ 0.0336, -0.0140,  0.0545,  0.0324,  0.1036, -0.1009,  0.0895,  0.0791,\n",
       "         -0.1034,  0.0842],\n",
       "        [ 0.0495, -0.0266,  0.0649,  0.0275,  0.1086, -0.0873,  0.1104,  0.1150,\n",
       "         -0.1574,  0.0855],\n",
       "        [ 0.0358, -0.0133,  0.0826,  0.0326,  0.1174, -0.0884,  0.1098,  0.1031,\n",
       "         -0.1073,  0.0791],\n",
       "        [ 0.0367, -0.0179,  0.0471,  0.0340,  0.1030, -0.1023,  0.0906,  0.0784,\n",
       "         -0.0967,  0.0878],\n",
       "        [ 0.0433, -0.0203,  0.0562,  0.0331,  0.1043, -0.0882,  0.0975,  0.0959,\n",
       "         -0.1265,  0.0835],\n",
       "        [ 0.0441, -0.0263,  0.0609,  0.0345,  0.1132, -0.0931,  0.1018,  0.0778,\n",
       "         -0.1077,  0.1001],\n",
       "        [ 0.0414, -0.0243,  0.0544,  0.0270,  0.1120, -0.0937,  0.1070,  0.0779,\n",
       "         -0.1131,  0.0837]], grad_fn=<AddmmBackward0>)"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "net(imgs)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 67,
   "id": "49733c53",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "测试集准确率: 62.13%\n"
     ]
    }
   ],
   "source": [
    "# 测试模型\n",
    "# 初始化正确分类的计数器和总样本数计数器\n",
    "correct = 0  # 用于记录正确分类的样本数量\n",
    "total = 0  # 用于记录总共处理的样本数量\n",
    "\n",
    "# 使用torch.no_grad()上下文管理器，禁用梯度计算，因为在测试中我们不需要计算梯度\n",
    "with torch.no_grad():\n",
    "    # 遍历测试数据加载器(testloader)，它会产生测试集中的小批量数据\n",
    "    for data in testloader:\n",
    "        images, labels = data  # 从数据加载器中获取测试图像和对应的标签\n",
    "\n",
    "        # 使用训练好的神经网络(net)进行前向传播，得到预测结果(outputs)\n",
    "        outputs = net(images.to(device))\n",
    "\n",
    "        # 使用torch.max函数，沿着维度1（通常是类别维度），找到每个样本中具有最高预测概率的类别\n",
    "        _, predicted = torch.max(outputs.data, 1)\n",
    "\n",
    "        # 更新总样本数计数器\n",
    "        total += labels.size(0)  # labels.size(0)返回当前批量中的样本数量\n",
    "\n",
    "        # 使用(predicted == labels)比较预测值与实际标签，返回一个布尔张量\n",
    "        # 使用sum().item()将True的数量相加，以得到正确分类的样本数量\n",
    "        correct += (predicted == labels.to(device)).sum().item()\n",
    "\n",
    "# 计算模型在测试集上的准确率\n",
    "accuracy = 100 * correct / total  # 使用正确分类的样本数和总样本数计算百分比准确率\n",
    "\n",
    "# 打印测试集准确率\n",
    "print(f\"测试集准确率: {accuracy}%\")  # 将准确率以百分比形式打印出来"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 71,
   "id": "8307f9d3",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "              precision    recall  f1-score   support\n",
      "\n",
      "       plane       0.66      0.67      0.67      1000\n",
      "         car       0.76      0.76      0.76      1000\n",
      "        bird       0.52      0.49      0.51      1000\n",
      "         cat       0.42      0.41      0.41      1000\n",
      "        deer       0.55      0.55      0.55      1000\n",
      "         dog       0.48      0.51      0.49      1000\n",
      "        frog       0.68      0.71      0.70      1000\n",
      "       horse       0.69      0.67      0.68      1000\n",
      "        ship       0.73      0.73      0.73      1000\n",
      "       truck       0.71      0.70      0.71      1000\n",
      "\n",
      "    accuracy                           0.62     10000\n",
      "   macro avg       0.62      0.62      0.62     10000\n",
      "weighted avg       0.62      0.62      0.62     10000\n",
      "\n"
     ]
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 640x480 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "classes = ('plane', 'car', 'bird', 'cat', 'deer', 'dog', 'frog', 'horse', 'ship', 'truck')\n",
    "\n",
    "from sklearn.metrics import confusion_matrix, ConfusionMatrixDisplay, classification_report\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "# 1) 在 test 函数里收集\n",
    "y_trues, y_preds = [], []\n",
    "net.eval()\n",
    "with torch.no_grad():\n",
    "    for x, y in testloader:\n",
    "        x = x.to(device)\n",
    "        logits = net(x)\n",
    "        preds = logits.argmax(dim=1).cpu()\n",
    "        y_preds.extend(preds.numpy())\n",
    "        y_trues.extend(y.numpy())\n",
    "\n",
    "# 2) 计算并打印报告\n",
    "print(classification_report(y_trues, y_preds, target_names=classes))\n",
    "\n",
    "# 3) 混淆矩阵\n",
    "cm = confusion_matrix(y_trues, y_preds)\n",
    "disp = ConfusionMatrixDisplay(confusion_matrix=cm,\n",
    "                              display_labels=classes)\n",
    "disp.plot(cmap=plt.cm.Blues)\n",
    "plt.xticks(rotation=45)\n",
    "plt.title(\"Confusion Matrix\")\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 68,
   "id": "72ffb3cb",
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Exception ignored in: <function _MultiProcessingDataLoaderIter.__del__ at 0x000002316402D800>\n",
      "Traceback (most recent call last):\n",
      "  File \"c:\\Users\\xfwang\\anaconda3\\envs\\CX\\Lib\\site-packages\\torch\\utils\\data\\dataloader.py\", line 1618, in __del__\n",
      "    self._shutdown_workers()\n",
      "  File \"c:\\Users\\xfwang\\anaconda3\\envs\\CX\\Lib\\site-packages\\torch\\utils\\data\\dataloader.py\", line 1576, in _shutdown_workers\n",
      "    if self._persistent_workers or self._workers_status[worker_id]:\n",
      "AttributeError: '_MultiProcessingDataLoaderIter' object has no attribute '_workers_status'\n",
      "Exception ignored in: <function _MultiProcessingDataLoaderIter.__del__ at 0x000002316402D800>\n",
      "Traceback (most recent call last):\n",
      "  File \"c:\\Users\\xfwang\\anaconda3\\envs\\CX\\Lib\\site-packages\\torch\\utils\\data\\dataloader.py\", line 1618, in __del__\n",
      "    self._shutdown_workers()\n",
      "  File \"c:\\Users\\xfwang\\anaconda3\\envs\\CX\\Lib\\site-packages\\torch\\utils\\data\\dataloader.py\", line 1576, in _shutdown_workers\n",
      "    if self._persistent_workers or self._workers_status[worker_id]:\n",
      "AttributeError: '_MultiProcessingDataLoaderIter' object has no attribute '_workers_status'\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "----------------------------------------------------------------\n",
      "        Layer (type)               Output Shape         Param #\n",
      "================================================================\n",
      "            Conv2d-1            [-1, 6, 28, 28]             456\n",
      "         MaxPool2d-2            [-1, 6, 14, 14]               0\n",
      "            Conv2d-3           [-1, 16, 10, 10]           2,416\n",
      "         MaxPool2d-4             [-1, 16, 5, 5]               0\n",
      "            Linear-5                  [-1, 120]          48,120\n",
      "            Linear-6                   [-1, 84]          10,164\n",
      "            Linear-7                   [-1, 10]             850\n",
      "================================================================\n",
      "Total params: 62,006\n",
      "Trainable params: 62,006\n",
      "Non-trainable params: 0\n",
      "----------------------------------------------------------------\n",
      "Input size (MB): 0.01\n",
      "Forward/backward pass size (MB): 0.06\n",
      "Params size (MB): 0.24\n",
      "Estimated Total Size (MB): 0.31\n",
      "----------------------------------------------------------------\n"
     ]
    }
   ],
   "source": [
    "# 绘制模型结构\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "from torchsummary import summary\n",
    "import torch.nn.functional as F\n",
    "\n",
    "# 安装 torchsummary，如果未安装\n",
    "# pip install torchsummary\n",
    "\n",
    "# 使用 torchsummary 绘制模型结构\n",
    "summary(net, (3, 32, 32), device=\"cuda\")\n",
    "\n",
    "# 展示模型结构\n",
    "plt.show()"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "CX",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.13.2"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
